📍 문제 설명
💡 접근
0을 1로 바꾸는 방법과 1을 0으로 바꾸는 방법중 최솟값을 구해야한다.
전부 0으로 바꾸는 카운트 변수, 전부 1로 바꾸는 카운트 변수 선언하고
첫번째 값에(0 or 1) 따라 카운트 변수를 증가시켜줌
이후에 선형적으로 탐색하여 바로 앞에 값이랑 같이 다르면 카운트를 증가.
0으로 바꾸는 경우에는 숫자가 1일때 count0 증가
1로 바꾸는 경우에는 숫자가 0일때 count1 증가
👩💻 코드
import java.util.*;
public class Main {
public static int solution(String s) {
int answer = 0;
int count0 = 0; //전부 0으로 바꾸는 경우
int count1 = 0; //전부 1로 바꾸는 경우
//첫번째 원소에 대해서 처리
if(s.charAt(0) == '1') {
count0 += 1;
} else {
count1 += 1;
}
//두번째 원소부터 모든 원소를 확인
for(int i = 0; i < s.length() - 1; i++) {
//값이 바뀔때만 처리해줌
if(s.charAt(i) != s.charAt(i + 1)) {
//값이 같지 않은데 1로 바뀌는 경우 -> 0으로 바꿔줘야함
if(s.charAt(i + 1) == '1') count0 += 1;
//값이 같지 않은데 0으로 바뀌는 경우 -> 1로 바꿔줘야 함
else count1 += 1;
}
}
System.out.println(count0); // 5
System.out.println(count1); // 4
//1로 바꾸어버리면 4번만에 바뀜
answer = Math.min(count0, count1);
return answer;
}
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int[] arr = {2,3,1,2,2};
Arrays.sort(arr);
solution("11001100110011000001");
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String s = kb.nextLine();
//해당 숫자를 모두 1로 바꾸는 것과 0으로 바꾸는 횟수 중 최소를 기록한다.
int result = 0;
//전부 0으로 바꾸는 경우
int count0 = 0;
//전부 1으로 바꾸는 경우
int count1 = 0;
//1일땐 0으로 바꿔줘야함
if(s.charAt(0) == '1') count0 += 1;
//0일땐 1로 바꿔줘야함
else count1 += 1;
for(int i = 0; i < s.length() - 1; i++) {
//두 숫자가 같지 않을 때만 판단하면됨
if(s.charAt(i) != s.charAt(i+1)) {
//1로 바뀌면 0으로 바꿔줘야함
if(s.charAt(i+1) == '1') count0 += 1;
//0으로 바뀌면 1로 바꿔줘야함
else count1 += 1;
}
}
result = Math.min(count0, count1);
System.out.println(result);
}
}
'Algorithm > 이코테' 카테고리의 다른 글
5.볼링공 고르기 (0) | 2021.12.10 |
---|---|
4.만들 수 없는 금액 (0) | 2021.12.10 |
2.곱하기 혹은 더하기 (0) | 2021.12.10 |
1.모험가 길드 (0) | 2021.12.10 |
효율적인 화폐 구성 (0) | 2021.11.25 |