<문제>
https://www.acmicpc.net/problem/25495
<틀린 풀이>
N = int(input())
phone = list(map(int,input().split()))
battery = 2
n = 2
for i in range(1,N):
if phone[i-1]==phone[i]:
n*=2
battery +=n
if battery >= 100:
battery = 0
n = 1
else:
battery +=2
print(battery)
위 코드에는 반례가 존재하게 됩니다. 우선, else 부분에서 기존 누적돼있는 percent 값을 초기화시켜주지 않고, battery 값만을 생각해줬기 때문에 오답이 되게 됩니다. 이외에도 위 코드는 잘못된 부분이 존재하는데 그것은 밑에 또 다른 코드를 보며 설명을 하겠습니다.
< 위 코드에 대한 반례 >
input
8
2 2 1 3 1 2 2 1
분명 정상적인 출력이라면 20이 결과값으로 나와야 할 것입니다.
< 틀린 풀이2 >
N = int(input())
A = list(map(int,input().split()))
battery = 2
percent = 2
for i in range(N-1):
if A[i] == A[i+1]:
percent*=2
battery+=percent
if battery >= 100:
battery = 0
percent = 1
else:
battery+=2
percent = 2
print(battery)
다른 부분은 이상이 없지만 battery가 100 이상이 되면 처리되는 부분이 if 구문에만 들어가는 것이 아니라, else구문에도 위 부분이 들어가 줘야 합니다.
if 구문에서 100이상이 될지, else 구문에서 100 이상이 될지 알 수 없기 때문입니다.
사실 가장 처음에 제출한 코드는 battery가 100이상인지 아닌지에 따라 if else로 구분이 되게끔 작성했었는데, 문제를 풀다 보니 그 부분을 간과했던 것 같습니다.
< PASS >
N = int(input())
A = list(map(int,input().split()))
battery = 2
percent = 2
for i in range(N-1):
if A[i] == A[i+1]:
percent*=2
battery+=percent
if battery >= 100:
battery = 0
percent = 1
else:
battery+=2
percent = 2
if battery >= 100:
battery = 0
percent = 1
print(battery)
< map 사용하기 >
https://dojang.io/mod/page/view.php?id=2179