Notice
Recent Posts
Recent Comments
Link
jyamethyst21 님의 블로그
백준 1439번- '뒤집기' (PYTHON 풀이) 본문
문제:

0은 1로, 1은 0으로 바꿔서 모두 동일한 숫자로 변경할건데 이때 변경하는 횟수를 저장해서 가장 적은 수인 것을 출력하면 된다.
풀이:
s = input()
zero_group = 0
one_group = 0
if s[0] == '0':
zero_group += 1
else:
one_group += 1
for i in range(1, len(s)):
if s[i] != s[i-1]:
if s[i] == '0':
zero_group += 1
else:
one_group += 1
print(min(zero_group, one_group))
문자를 입력받고 0을 세는 그룹, 1을 세는 그룹을 담는 변수를 초기화해준다.
그 후 첫번째 값이 어느 그룹에 해당하는지 세기 위해서 조건문을 실행해주고 이후 반복문에 진입한다.
반복문은 이미 0번째 인덱스는 계산했으므로 1번째 인덱스부터 시작해서 1번째와 0번째 비교, ... i, i-1번째를 비교한다.
비교하면서 i와 그 이전 인덱스값이 일치하지 않게 되면 내부 if문을 실행해서 0 또는 1 그룹의 수를 1 증가시킨다.
마지막으로 해당 값들이 전부 저장되어있는 값 중 작은 수를 출력하면 해당 문제를 풀 수 있다. min을 쓰는 이유는 0을 1로 뒤집는 횟수와 1을 0으로 뒤집는 횟수를 비교해서 가장 작은 값을 출력해야 하기 때문이다.
한 가지 예시를 들어보겠다. 's = 010101' 일 경우다.
i s[i] s[i-1] 새 그룹 여부 새 그룹 종류
| 1 | '1' | '0' | O | 1 그룹 → one_group = 1 |
| 2 | '0' | '1' | O | 0 그룹 → zero_group = 2 |
| 3 | '1' | '0' | O | 1 그룹 → one_group = 2 |
| 4 | '0' | '1' | O | 0 그룹 → zero_group = 3 |
| 5 | '1' | '0' | O | 1 그룹 → one_group = 3 |
이러한 로직대로 흘러갈 것이다. 이래도 헷갈린다면 다른 값을 대입하면 될 것이다!
'CODING 💻' 카테고리의 다른 글
| 백준 2523번- '별 찍기 - 13' (PYTHON 풀이) (0) | 2025.12.12 |
|---|---|
| 백준 10991번- '별 찍기 - 16' (PYTHON 풀이) (0) | 2025.12.11 |
| 백준 2754번- '학점계산' (PYTHON 풀이) (0) | 2025.12.09 |
| 백준 10953번- 'A+B - 6' (PYTHON 풀이) (0) | 2025.12.08 |
| 백준 2475번- '검증수' (PYTHON 풀이) (0) | 2025.12.07 |
