반응형
백준 2851번 문제입니다. (solved.ac)기준 브론즈 1 문제입니다.
https://www.acmicpc.net/problem/2851
간단한 구현 문제입니다. 10개의 버섯점수를 입력받고 순차적으로 먹으면서 점수의 합을 최대한 100에 가깝게 만드는 것이 목표입니다.
첫번째로 작성했던 코드입니다.
score = []
ans = 0
j = 0
for i in range(10) :
score.append(int(input())) # 10번 반복하여 버섯의 점수를 입력
while True : # 무한하게 반복
ans += score[j] # 점수를 획득
if (ans == 100) : # 점수가 100과 동일하다면 즉시 반복문을 탈출하고 정답을 출력
break
elif (ans > 100) :
# ans가 100 보다 크다면 ans값과 ans값에서 방금 더해준 값(score[j])을 빼준 값 중
# 100과 차이가 더 작은 값을 출력
# 단 두 값의 차이가 같다면 둘 중 더 큰 값을 출력
if ans - 100 <= 100 - (ans - score[j]) :
break
else :
ans = ans - score[j]
break
j += 1
print(ans)
백준에서 채점했을 때 위의 코드는 100%에서 런타임에러(IndexError)가 발생했습니다. 생각을 해보니까 입력을 (1,1,1,1,1,1,1,1,1,1)과 같이 받는다면 10개의 버섯을 모두 먹어도 점수가 10점인데 위의 코드는 while True : 라는 무한 반복문에서
ans(점수 합이) 100을 넘었을 때에만 while 반복문을 탈출하도록 작성되어있어 인덱스 범위를 초과하여 계속해서 반복되는 문제가 발생합니다.
두번째로 작성한 정답 코드입니다.
score = []
ans = 0
j = 0
for i in range(10) :
score.append(int(input())) # 10번 반복하여 버섯의 점수를 입력
while j <= 9 : # j는 리스트의 인덱스를 나타냄
ans += score[j] # 점수를 획득
if (ans == 100) : # 점수가 100과 동일하다면 즉시 반복문을 탈출하고 정답을 출력
break
elif (ans > 100) :
# ans가 100 보다 크다면 ans값와 ans값에서 방금 더해준 값(score[j])을 빼준 값 중
# 100과 차이가 더 작은 값을 출력
# 단 두 값의 차이가 같다면 둘 중 더 큰 값을 출력
if ans - 100 <= 100 - (ans - score[j]) :
break
else :
ans = ans - score[j]
break
j += 1
print(ans)
나머지는 동일하지만 while문의 조건을 j <= 9로 수정하여 10개의 버섯을 전부 먹으면 100점이 되지않아도 반복문을 탈출하고 정답을 출력할 수 있도록 수정하였습니다.
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
[백준] 2178번 미로 탐색(BFS알고리즘)(Python - 파이썬) (0) | 2022.01.14 |
---|---|
[백준] 18352번 특정 거리의 도시 찾기(BFS알고리즘)(Python - 파이썬) (0) | 2022.01.12 |
[백준] 1012번 유기농 배추(DFS 알고리즘)(Python - 파이썬) (0) | 2022.01.11 |
[백준] 2667번 단지번호붙이기(DFS알고리즘)(Python - 파이썬) (0) | 2022.01.09 |
[백준] 1748번 수 이어 쓰기 1(Python - 파이썬) (0) | 2022.01.07 |
최근댓글