728x90
시간 제한 2초, 메모리 제한 1536MB
# 조건
- MBTI(Myers-Briggs Type Indicator)는 C.G.Jung의 심리유형론을 근거로 하여 Katharine Cook Briggs와 Isabel Briggs Myers가 보다 쉽고 일상생활에 유용하게 활용할 수 있도록 고안한 자기보고식 성격유형지표이다. (출처: 위키백과)
- MBTI는 아래와 같이 네 가지 척도로 사람들의 성격을 구분한다.
- 외향(E) / 내향(I)
- 감각(S) / 직관(N)
- 사고(T) / 감정(F)
- 판단(J) / 인식(P)
- 각 척도마다 두 가지 분류가 존재하므로, MBTI는 총 2^4=16가지 유형이 있음을 알 수 있다.
- 일반적으로 MBTI의 유형들은 각 분류를 나타내는 알파벳 한 글자씩을 따 네 글자로 표시하게 된다.
- 모든 유형의 목록은 다음과 같다.
- ISTJ, ISFJ, INFJ, INTJ, ISTP, ISFP, INFP, INTP, ESTP, ESFP, ENFP, ENTP, ESTJ, ESFJ, ENFJ, ENTJ
- MBTI 성격 유형을 이용하면 두 사람 사이의 심리적인 거리를 정의할 수 있다.
- 이는 두 사람의 MBTI 유형에서 서로 다른 분류에 속하는 척도의 수로 정의된다.
- 예를 들어, MBTI 유형이 ISTJ인 사람과 ISFJ인 사람 사이의 거리는 1이며, INTP인 사람과 ENTJ인 사람 사이의 거리는 2이다.
- 이 정의를 확장해서 세 사람 사이의 심리적인 거리도 정의할 수 있다. 세 사람 A, B, C가 있을 때 이들의 심리적인 거리는
- (A와 B 사이의 심리적인 거리) + (B와 C 사이의 심리적인 거리) + (A와 C 사이의 심리적인 거리)
- 대학교에서 심리학 교수로 일하는 종서는 자신이 가르치는 학생들의 심리적인 특성을 분석하고 싶어한다.
- 오늘이 생일인 종서를 위해 N명의 학생들의 MBTI 유형이 주어질 때, 가장 가까운 세 학생 사이의 심리적인 거리를 구해보자.
입력
- 첫 줄에는 테스트 케이스의 수를 나타내는 정수 T가 주어진다.
- 각 테스트 케이스의 첫 줄에는 학생의 수를 나타내는 하나의 정수 N이 주어지며, 두 번째 줄에는 각 학생의 MBTI 성격 유형을 나타내는 문자열들이 사이에 공백을 두고 주어진다.
출력
- 각 테스트 케이스에 대한 답을 정수 형태로 한 줄에 하나씩 출력한다.
제한
- 1 <= T <= 50
- 3 <= N <= 100000
- 각 테스트 케이스의 N의 합은 100,000을 넘지 않는다.
# 접근 방법
- 가장 가까운 3명을 찾는 것이므로 defaultdict을 활용하여 mbti를 기록해준 후, 3명 이상인 mbti 종류가 있다면 0과 함께 출력을 해준다.
- for - else 문을 활용하여 3명 이상인 경우가 없다면 combination으로 조합을 구해준다.
- 이후 각 조합의 3명간의 거리를 계산하여 최소 거리라면 result를 갱신해준다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import defaultdict
from itertools import combinations
def check(a, b):
if a == b:
return 0
else:
return 1
T = int(input())
for _ in range(T):
result = float('inf')
N = int(input())
people = [*map(str, input().rstrip().split())]
mbties = defaultdict(int)
for i in people:
mbties[i] += 1
for i in mbties:
if mbties[i] >= 3:
print(0)
break
else:
for j in combinations(people,3):
k = j[0]
l = j[1]
u = j[2]
cnt = 0
for m in range(4):
a = check(k[m], l[m])
b = check(k[m], u[m])
c = check(l[m], u[m])
cnt += a + b + c
if cnt < result:
result = cnt
print(result)
728x90
'ALGORITHM > Brute Force' 카테고리의 다른 글
[백준 2615번] 파이썬 - 오목 (0) | 2023.08.03 |
---|---|
[백준 1515번] 파이썬 - 수 이어쓰기 (0) | 2023.07.23 |
[백준 16637번] 파이썬 - 괄호 추가하기 (0) | 2023.06.02 |
[백준 12100번] 파이썬 - 2048 (0) | 2023.03.09 |
[백준 15686번] 파이썬 - 치킨 배달 (0) | 2022.12.30 |