STUDY/Algorithm
[백준] 1268. 임시반장 구하기
sinawi95
2021. 2. 2. 22:00
728x90
N = int(input())
list_2 = []
for _ in range(N):
list_2.append(list(map(int,input().split())))
# list_2= [[2, 3, 1, 7, 3], [4, 1, 9, 6, 8], [5, 5, 2, 6, 4], [6, 5, 2, 6, 7], [8, 4, 2, 2, 2],[5, 5, 2, 4, 4]]
# N=len(list_2)
student=[] # 학생별로 겹치는 학생을 저장
for i in range(N):
student.append([]*5)
tmp1=[] # i,j => j,i
for i in range(5):
tmp2 = []
for j in range(N):
tmp2.append(list_2[j][i])
tmp1.append(tmp2)
for i, list_1 in enumerate(tmp1): # 자신을 포함하여 겹치는 반인 경우 student에 저장
for j, val1 in enumerate(list_1):
for k, val2 in enumerate(list_1):
if val1 == val2:
student[j].append(k)
tmp = []
for idx, std in enumerate(student): # 막무가내로 넣었으니까 중복 제거
tmp.append((idx+1,len(set(std))))
tmp.sort(key=lambda x: x[1], reverse=True) # 정렬해서 가장 큰값 찾고
print(tmp[0][0]) # 그때 인덱스 출력
오늘 머리가 안돌아가서 그냥 막무가내 식으로 풀었다. 풀이는 그냥 주석으로 대체한다
원래는 타인의 코드도 씹고 뜯고 맛보고 즐기고 해야하지만 더이상 보고싶지 않다.
N = int(input())
list_2 = []
for _ in range(N):
list_2.append(list(map(int,input().split())))
student=[] # 학생별로 겹치는 학생을 저장
for i in range(N):
student.append(set()) #set으로 지정
tmp1=[] # i,j => j,i
for i in range(5):
tmp2 = []
for j in range(N):
tmp2.append(list_2[j][i])
tmp1.append(tmp2)
for i, list_1 in enumerate(tmp1): # 자신을 포함하여 겹치는 반인 경우 student에 저장
for j, val1 in enumerate(list_1):
for k, val2 in enumerate(list_1):
if val1 == val2:
student[j].add(k)
max_idx, max_val = 0,0
for idx, val in enumerate(student):
len_val = len(val)
if len_val>max_val:
max_idx = idx+1
max_val = len_val
print(max_idx)
아침에 조금더 고쳤다. 처음부터 set을 사용해서 중복을 제거해주면서 하였고 메모리를 반이상 줄였다! 그래도 뭔가 부족하다.