728x90
반응형
Java 문제풀이
import java.util.Scanner;
public class b_1439 {
public static void main(String[] args) {
String coin;
int zero=0, one=0,sum_one=0, sum_zero=0;
Scanner scanner = new Scanner(System.in);
coin = scanner.next();
int length = coin.length();
int []coin_c = new int[length];
char x;
for(int i=0; i<length;i++){
x = coin.charAt(i);
coin_c[i] = Character.getNumericValue(x);
if(coin_c[i] == 0){
zero++;
}
else{
one++;
}
}
for(int i=0;i<length-1;i++){
if(coin_c[i]==1 && coin_c[i+1]!=1){
sum_one++;
}
}
if(coin_c[length-1]==1){
sum_one++;
}
for(int i=0;i<length-1;i++){
if(coin_c[i]==0 && coin_c[i+1]!=0){
sum_zero++;
}
}
if(coin_c[length-1]==0){
sum_zero++;
}
if(sum_zero>sum_one){
System.out.println(sum_one);
}
else{
System.out.println(sum_zero);
}
}
}
어쩌면 비효율적인 코드라고 생각합니다.
1을 뒤집는 방식과, 0을 뒤집는 방식 모두 집계를 하여 그중에서 덜 뒤집은 횟수를 답으로 출력하는 방식입니다.
세부기능 코드를 보면, 문자열로 긴 숫자를 입력받고, 그것을 숫자 배열로 변환합니다.
이후에는 전체에서 1을 뒤집는 경우와 0을 뒤집는 경우를 집계하는 코드입니다.
연속된만큼 뒤집어주는거기 때문에, 1을 뒤집는 경우에서는 숫자 배열을 보고 현재 값이 1이고 다음 배열값이 1이면 아직 마지막 1이 아니기 때문에 넘어가고, 현재값이 1인데 다음값이 0이면 현재가 마지막 1이기 때문에 연속된 만큼 한번 뒤집게 되니 카운트를 ++ 해줍니다. 그리고 마지막 배열 값은 어떤 경우에든 1이면 무조건 카운트 되기 때문에 1이면 카운트 되도록 해주었습니다.
0을 집계하는 방식도 마찬가지입니다.
그렇게 둘중에서 뒤집는 수가 더 적은것을 출력합니다. 같은경우는 아무거나 출력해도 됩니다.
결과
728x90
반응형
'코딩문제풀이 > 백준' 카테고리의 다른 글
[백준 1009번] 분산처리 Python 풀이 (0) | 2021.07.03 |
---|---|
[백준 1668번] 트로피 진열 Java 풀이 (0) | 2021.05.20 |
[백준 1434번] 책 정리 Java 풀이 (0) | 2021.05.08 |
[백준 11720번] 숫자의 합 Java 풀이 (0) | 2021.05.08 |
[백준 1145번] 적어도 대부분의 배수 Java 풀이 (0) | 2021.05.08 |