본문 바로가기

스터디 1일 1커밋

240221 [BOJ/백준] 2309. 일곱 난쟁이

 

2309번: 일곱 난쟁이 (acmicpc.net)

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net


나의 코드

arr = [list(map(int, input().split())) for _ in range(9)]

arr.sort() # 출력이 오름차순이어야 하므로 처음부터 정렬
# print(arr)


# 아홉난쟁이 키의 합 구하기
sum_height = 0
for a in arr:
    sum_height += a[0]
# print(sum_height)

# 아홉난쟁이에서 두 난쟁이의 키의 합을 뺀 값이 100인 두 난쟁이의 키 구하기
for i in range(9):
    for j in range(i+1, 9):
        if sum_height - (arr[i][0] + arr[j][0]) == 100:
            # print(arr[i][0], arr[j][0])
            remove1 = arr[i]  #제거값 2개 구하기
            remove2 = arr[j]

# k를 돌면서 제거값이면 패스 아니면 출력
for k in arr:
    if k == remove1 or k == remove2:
        pass
    else:
        print(*k)

 

결과


한줄평 : 브론즈 문제 너무 좋다!

구현할 수 있는 기능이 브루트포스알고리즘이어서 블랙잭의 방법으로 풀어보려고 했다. 물론 브루트포스알고리즘은 그냥 for문 돌리는거~~ 7명의 키를 더하는 것은 빅오계산법에 의하면 계산시간이 오래 걸릴 것이라고 생각했다. 아마 2^7이려나...? 입력값을 너무 당연하게 input().split()으로 받았는데 우연히 원하는 결과값으로 받을 수 있었다. 다른 방법은 원하는 방법이 아니라 그냥 조금 복잡하지만 2차원 배열로 받았다. 실버만 풀다가 브론즈문제 풀었는데 술술 풀려서 기분좋은 밤이다!!ㅎㅎ