<문제>
https://www.acmicpc.net/problem/25495
25495번: 에어팟
다섯 번째 핸드폰까지 연결하면 누적 배터리 소모량은 62퍼센트가 된다. 그리고 여섯 번째 핸드폰에 연결하면 배터리 소모량이 100퍼센트 이상인 126퍼센트가 되므로 현재 에어팟은 충전시켜야
www.acmicpc.net
<틀린 풀이>
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
파이썬 코딩 도장: 6.4 입력 값을 변수 두 개에 저장하기
지금까지 input 한 번에 값 하나만 입력받았습니다. 그럼 input 한 번에 값을 여러 개 입력받으려면 어떻게 해야 할까요? 이때는 input에서 split을 사용한 변수 여러 개에 저장해주면 됩니다(각 변수
dojang.io