N
명의 MBTI
가 주어졌을 때, 가장 적게 차이가 나는 3명을 선택하는 문제로, 여기서 차이는 MBTI
의 각 항목이 다름을 의미한다.
예) ESTP
<-> INFJ
는 모두 다르기 때문에 차이가 4다.
- 무작정 완전 탐색을 수행하려다가,
N
이 100,000까지 나올 수 있어 다른 방법을 생각
MBTI
는 각 항목의 경우가 2개씩 존재하여 16개의 특성이 존재.
N
이 32가 넘어가면, 동일한MBTI
를 가지는 사람이 최소 3명 존재
(N
이 16이 될 떄 마다 모든MBTI
는 1번씩 나올 수 있기 떄문)
N
이 32보다 큰 경우에는 0 출력, 그렇지 않은 경우에는 완전탐색 수행
i
j
k
로 3개의 인덱스를 생성하여 3중 중첩for
문으로 모든 경우를 탐색 (i
j
k
가 같은 경우에는 탐색 생략)
result
변수에 현재까지 가장 작게 나온 경우를 집어넣고,min
구문을 이용해 더 작은 경우가 나오는 경우 변경
import sys
input = sys.stdin.readline
test_case = int(input())
for i in range(test_case):
n = int(input())
result = 13
mbti_list = list(map(str, input().split()))
if n > 32: # n이 32가 넘어가게 되면 동일한 mbti가 최소 3명
print(0)
else:
for i in range(n):
for j in range(n):
for k in range(n):
if i == j or j == k or i == k:
continue
tmp = 0
for _ in range(4):
if mbti_list[i][_] != mbti_list[j][_]:
tmp += 1
if mbti_list[j][_] != mbti_list[k][_]:
tmp += 1
if mbti_list[i][_] != mbti_list[k][_]:
tmp += 1
result = min(result, tmp)
print(result)
처음 채점할 떄, ValueError
가 발생했다. 그 이유가 뭘까
import sys
input = sys.stdin.readline
test_case = int(input())
for i in range(test_case):
n = int(input())
result = 13
if n > 32: # n이 32가 넘어가게 되면 동일한 mbti가 최소 3명
print(0)
else:
mbti_list = list(map(str, input().split())) # <<< 에러 발생
for i in range(n):
for j in range(n):
for k in range(n):
if i == j or j == k or i == k:
continue
tmp = 0
for _ in range(4):
if mbti_list[i][_] != mbti_list[j][_]:
tmp += 1
if mbti_list[j][_] != mbti_list[k][_]:
tmp += 1
if mbti_list[i][_] != mbti_list[k][_]:
tmp += 1
result = min(result, tmp)
print(result)
위 코드에서와 같이 MBTI
를 받는 경우를 else
문 밑에 작성해서
n = int(input())
의 입력으로 mbti
가 입력되어 에러가 발생했다.