https://www.acmicpc.net/problem/1268
1268번: 임시 반장 정하기
오민식 선생님은 올해 형택초등학교 6학년 1반 담임을 맡게 되었다. 오민식 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다.
www.acmicpc.net
🔷 알고리즘 분류 - 구현 난이도 - 브론즈 1
🔶문제 풀이 - 구현을 이용한 풀이
# 입력 받을 테스트 케이스의 수 T를 입력받습니다.
T=int(input())
# T만큼의 2차원 배열 x를 입력받습니다.
x=[list(map(int,input().split())) for _ in range(T)]
# T만큼의 세트 형태의 1차원 배열 y를 생성합니다.
y=[set() for _ in range(T)]
# 2차원 배열 x를 순회합니다.
for i in range(5):
for j in range(T):
for k in range(T):
# 같은 열에 위치한 두 숫자가 같고, 그 두 숫자가 다른 행에 위치할 경우
if j != k and x[k][i] == x[j][i]:
# 조건을 만족하는 행의 인덱스를 y에 추가합니다.
y[j].add(k)
# y의 각 원소(세트) 중, 원소의 개수가 가장 많은 것을 찾아 result에 저장합니다.
result=max(len(i) for i in y)
# y를 순회하여,
for i in range(T):
# 만약 y의 원소(세트)의 길이가 result와 같다면,
if len(y[i])==result:
# 그 세트의 인덱스(행의 번호, 1부터 시작)를 출력하고,
print(i+1)
# 반복문을 종료합니다.
break
🔶문제 이해하기
# T만큼의 세트 형태의 1차원 배열 y를 생성합니다.
y=[set() for _ in range(T)]
위 코드는 T만큼의 세트(set) 형태의 1차원 배열 y를 생성하는 코드입니다.
set()는 중복된 값을 허용하지 않는 특징을 가지고 있습니다.
예를 들어, T가 3이라고 가정해 봅시다.
그러면 다음과 같은 코드를 실행하게 됩니다.
y=[set() for _ in range(3)]
이 코드를 실행하면, y는 3개의 빈 세트를 원소로 가지는 리스트가 됩니다.
즉, y = [set(), set(), set()] 와 같은 형태를 가지게 됩니다.
그러고 나서, 어떤 조건에 따라 이 세트들에 값을 추가하게 됩니다.
예를 들어, y [0]. add(1), y [1]. add(2), y [2]. add(3)과 같은 코드를 실행합니다.
y는 [{1}, {2}, {3}]와 같은 형태를 가지게 됩니다.
여기서 중요한 점은, 세트는 중복된 값을 허용하지 않는다는 것입니다.
즉, 같은 값을 여러 번 추가하려고 해도 세트 내에는 그 값이 한 번만 존재하게 됩니다.
예를 들어, y [0]. add(1)을 다시 실행하더라도 y는 여전히 [{1}, {2}, {3}]와 같은 형태를 가지게 됩니다.
다음으로 y = [{1, 2}, {3, 4, 5}, {6}]이라고 가정해 봅시다.
그리고 result는 len(y [1]) = 3으로 설정하겠습니다.
# y를 순회하여,
for i in range(T):
# 만약 y의 원소(세트)의 길이가 result와 같다면,
if len(y[i])==result:
# 그 세트의 인덱스(행의 번호, 1부터 시작)를 출력하고,
print(i+1)
# 반복문을 종료합니다.
break
위의 코드를 실행하면, 출력 결과는 2가 됩니다.
이는 y [1]의 길이가 result인 3과 같기 때문입니다.
i+1을 출력하는 이유는 문제에서 행의 번호가 1부터 시작하기 때문입니다.
파이썬의 인덱스는 0부터 시작하므로, 1을 더해주어 문제의 조건에 맞추어 줍니다.
그리고 break문은 조건을 만족하는 첫 번째 원소를 찾은 후에 반복문을 종료하기 위해 사용됩니다.
즉, result와 길이가 같은 첫 번째 세트의 인덱스를 찾으면 즉시 반복문을 빠져나옵니다.
'백준 알고리즘' 카테고리의 다른 글
백준 - 10844번 쉬운 계단 수 python 문제풀이 [Hellfer] (0) | 2024.02.19 |
---|---|
백준 - 11725번 트리의 부모 찾기 python 문제풀이 [Hellfer] (2) | 2024.02.07 |
백준 - 1238번 파티 python 문제풀이 [Hellfer] (2) | 2024.01.31 |
백준 - 1359번 복권 python 문제풀이 [Hellfer] (2) | 2024.01.29 |
백준 - 2535번 아시아 정보올림피아드 python 문제풀이 [Hellfer] (3) | 2024.01.24 |
백준 - 1543번 문서 검색 python 문제풀이 [Hellfer] (0) | 2024.01.19 |
백준 - 1817번 짐 챙시는 숌 python 문제풀이 [Hellfer] (0) | 2024.01.18 |
백준 - 14719번 빗물 python 문제풀이 [Hellfer] (0) | 2024.01.15 |