문제
정답 소스코드 (Python)
arr=[]
result=[]
find_result=False
sum=0
for i in range(9):
tmp=int(input())
arr.append(tmp)
sum+=tmp
for i in range(9):
for j in range(i+1,9):
tmp_sum=sum-arr[i]-arr[j]
if tmp_sum==100:
result.extend([arr[i],arr[j]])
find_result=True
break
if find_result:break
arr.sort()
for ele in arr:
if ele not in result:print(ele)
풀이 (Python)
전형적인 브루트포스 문제이다. 9개의 입력밖에 없고, 시간은 2초나 됨으로써 문제를 읽지않고도 브루트포스 알고리즘을 선택할 수 있다고 볼 수 있다.
문제의 전체적인 풀이는 9명의 난쟁이에서 2명을 빼고 7명을 더해서 100이 되는지 확인하는 것이 아니라, 9명을 모두 sum이라는 변수에 더해놓고, 2명을 빼서 100이 되는지 확인하였다.
브루트 포스 알고리즘 즉 모든 경우의 수를 검사하여 i와 j를 총합에서 뺀경우 100이된다면, 결과값에 저장한다.
tmp_sum=sum-arr[i]-arr[j]
if tmp_sum==100:
result.extend([arr[i],arr[j]])
이후 result리스트에 포함되어 있는 원소 2개를 제외한 나머지를 출력하면 되기 때문에 조건문으로 not in 연산자를 통해 result리스트 안에 없는 값이면 출력되도록 설계하였다.
for ele in arr:
if ele not in result:print(ele)
Point 1) 이중 for문 탈출
for i in range(9):
for j in range(i+1,9):
tmp_sum=sum-arr[i]-arr[j]
if tmp_sum==100:
result.extend([arr[i],arr[j]])
find_result=True
break
if find_result:break
현 풀이에서는 위와 같이 find_result변수를 따로 지정하여서 조건을 만족하면 True로 변환하고 밖에 for문에서도 바로 탈출하게 끔 설게하였다.
다른 방법으로는 이중 for문의 경우 함수로 처리하여 return을 하여 바로 탈출 할 수 있도록 설계할 수도 있다.
새로운 함수를 설정하여 break대신 return을 사용하는 방법이다.
def check(arr,sum):
result=[]
for i in range(9):
for j in range(i+1,9):
tmp_sum=sum-arr[i]-arr[j]
if tmp_sum==100:
result.extend([arr[i],arr[j]])
return result
'Baekjoon' 카테고리의 다른 글
[백준] 2503번 숫자 야구 (파이썬) (1) | 2024.01.28 |
---|---|
[백준] 10974번 모든 순열 (파이썬) (1) | 2024.01.28 |
[백준] 4485번 녹색 옷 입은 애가 젤다지? (파이썬) (0) | 2024.01.23 |
[백준] 13549번 숨바꼭질 3 ( 파이썬) (2) | 2024.01.22 |
[백준] 14940번 쉬운 최단거리 ( 파이썬) (1) | 2024.01.22 |