https://www.acmicpc.net/problem/20310
20310번: 타노스
어느 날, 타노스는 0과 1로 이루어진 문자열 $S$를 보았다. 신기하게도, $S$가 포함하는 0의 개수와 $S$가 포함하는 1의 개수는 모두 짝수라고 한다. 갑자기 심술이 난 타노스는 $S$를 구성하는 문자
www.acmicpc.net
이 문제는 정의 자체가 개인적으로는 조금 애매한 것 같다. 처음에는 자리 자체를 재배열 할 수 있다고 생각해서 구현을 했었는데 알고보니 문자의 자리는 옮기면 안되는 조건이 있었다.
자리수가 적을 때에는 두 케이스 답이 같아서 문제가 없었지만 처음 제출했을 때에는 부분점수로 25점만 맞은 걸 보니 아마 내 추측이 맞는 것 같다.
어쨌든 문제 조건을 고려하면서 정렬 상 최대한 작게하려면 0은 뒤에서부터 없애고, 1은 앞에서부터 없애면 되는 식으로 구현하면 되었다. 나는 입력값을 통쨰로 character 배열에 넣고, 각각 0과 1의 갯수를 카운트한 뒤 2로 나눈 후 앞/뒤부터 세면서 없애는 방식을 사용했다. 이 때 null값을 이용하기 위해 '\0' 방식을 사용했다.
문제 및 입출력
코드
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int[] num = new int[2];
char[] input = sc.nextLine().toCharArray();
int zero = 0;
int one = 0;
int cnt = 0;
for(int i=0; i<input.length; i++)
{
if(input[i]=='0')
{
zero++;
}
else if(input[i]=='1')
{
one++;
}
}
zero /= 2;
one /= 2;
for(int i=0; i<input.length; i++)
{
if(cnt==one)
{
break;
}
if(input[i]=='1')
{
input[i] = '\0';
cnt++;
}
}
cnt = 0;
for(int i=input.length-1; i>=0; i--)
{
if(cnt==zero)
{
break;
}
if(input[i]=='0')
{
input[i] = '\0';
cnt++;
}
}
for(int i=0; i<input.length; i++)
{
if(input[i]!='\0')
{
System.out.print(input[i]);
}
}
sc.close();
return;
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[백준] 1748 수 이어쓰기1 (4) | 2023.05.03 |
---|---|
[프로그래머스] 레벨0 최빈값 구하기 (3) | 2023.04.20 |
[프로그래머스] 레벨 3 연속 부분 수열 합의 개수 (2) | 2023.04.19 |
[프로그래머스] 레벨1 과일장수 (2) | 2023.04.18 |
[프로그래머스] 레벨3 귤 고르기 (2) | 2023.04.18 |
댓글