https://www.acmicpc.net/problem/20529
20529번: 가장 가까운 세 사람의 심리적 거리
각 테스트 케이스에 대한 답을 정수 형태로 한 줄에 하나씩 출력한다.
www.acmicpc.net
문제
mbti 의 거리를 구하여라
입력
첫 줄에는 테스트 케이스의 수를 나타내는 정수 TT가 주어진다.
각 테스트 케이스의 첫 줄에는 학생의 수를 나타내는 하나의 정수 NN이 주어지며, 두 번째 줄에는 각 학생의 MBTI 성격 유형을 나타내는 문자열들이 사이에 공백을 두고 주어진다.
출력
답을 한줄에 하나씩 출력
import sys
t = int(sys.stdin.readline())
def getDis(mbti1,mbti2): # mbti 거리 계산 함수
dis = 0
for i in range(4):
if mbti1[i] != mbti2[i]:
dis += 1
return dis
def for3(mbtis,lenMbtis): # mbti 돌면서 가장 작은 거리 를 계산한다.
minDis = 100001
if lenMbtis > 48: # mbti의 개수가 16개 3개가 중복되면 48이다. 이때 48이상이면 무조건 3개가 중복되는 mbti 가 나오게 되므로 최소 거리는 0이다
return 0
for i1 in range(lenMbtis - 2): # mbti 3개를 하나하나 검사한다.
for i2 in range(i1 + 1,lenMbtis - 1):
for i3 in range(i2 + 1,lenMbtis):
mbti1 = mbtis[i1]
mbti2 = mbtis[i2]
mbti3 = mbtis[i3]
dis = getDis(mbti1,mbti2) + getDis(mbti2,mbti3) + getDis(mbti1,mbti3) # 3개의 mbti 거리공식을 이용하여 거리를 계산한다.
minDis = min(dis,minDis) # 이중 최소 거리를 구한다.
return minDis
for i in range(t): # 테스트 케이스 만큼 돈다
n = int(sys.stdin.readline()) # mbti 의 개수
mbtis = sys.stdin.readline().split() # mbti 를 리스트로 받는다.
res = for3(mbtis,n) # 구한 mbti 의 최소거리를 res 에 넣고
print(res) # 출력한다.
'알고리즘' 카테고리의 다른 글
프로그래머스/위장/py (0) | 2022.08.24 |
---|---|
프로그래머스/전화번호 목록/py (0) | 2022.08.23 |
프로그래머스/문자열 압축/py (0) | 2022.08.21 |
프로그래머스/주차 요금 계산/py (1) | 2022.08.20 |
프로그래머스/올바른 괄호/py (0) | 2022.08.17 |