개발 공부용

[백준] 32953 - 회상 본문

코딩 테스트/99클럽 TIL

[백준] 32953 - 회상

솝제로 2025. 1. 24. 20:53

문제 출처 : https://www.acmicpc.net/problem/32953

 

문제
노교수는 N개의 수업을 진행했고 자신의 수업을 M개 이상 들은 학생이 몇 명인지 궁금했다.
수업의 들은 학생들의 학번이 주어질 때 조건을 만족하는 학생의 수를 구하자.

 

입력
  • 첫 번째 줄에 N, M이 차례대로 주어진다.(1<=N<=100;1<=N<=M)
  • 두 번째 줄부터 2xN개의 줄에 걸쳐 각 수업에 대한 정보 N개가 순서대로 주어진다.
  • 수업의 정보는 두 개의 줄로 이뤄진다.
  •     - 첫 번째 줄에 과목의 수강생 수.
  •     - 두 번째 줄에 수업을 들은 학생들의 학번이 공백으로 구분되어 주어진다.
  • 학번은 숫자 8개로 구성되며 1로 시작한다. 한 수업에 동일한 학번의 중복은 없다.

 

출력
  • M개 이상의 수업을 들은 학생의 수

 

풀이 방법
  1. sys.stdin.readline으로 N, M을 각각 저장한다.
  2. N번 for문 돌면서 수업을 들은 학생들의 학번을 모두 리스트에 담는다.
  3. 학번이 key, 들은 수업의 개수가 value인 딕셔너리를 만든다.
  4. value 리스트를 확인해서 M이상인 값이 몇 개 있는지 센다.
  5. 센 값을 출력한다.

 

작성한 코드
import sys

N, M = map(int, sys.stdin.readline().strip().split()) #1
students = {}
student_list = []

for i in range(N): #2
    student_num = sys.stdin.readline().strip()
    student_list += sys.stdin.readline().strip().split()

for student in student_list: #3
    if student not in students.keys():
        students[student]=1
    else:
        students[student]+=1 

result = 0

for i in students.values(): #4
    if(i>=M):
        result+=1

print(result) #5

 

문제 자체는 금방 풀었으나...

이중 for문을 안 쓰고 싶은데 안 쓰고 풀 방법이 쉽게 떠오르지 않았다.☠️

위 코드도 처음에 이중 for문으로 풀었다가 고친건데, 한 10글자만 고치고도 이중 for문을 안 쓸 수 있었다.

😰

 

점점 나아질거라고 생각한다. 나아지고 있고!

 

 

'코딩 테스트 > 99클럽 TIL' 카테고리의 다른 글

[백준] 17608 - 막대기  (0) 2025.02.05
[백준] 10828 - 스택  (0) 2025.02.04
[백준] 31562 - 전주 듣고 노래 맞히기  (0) 2025.01.24
[백준] 32978 - 아 맞다 마늘  (2) 2025.01.23
[백준] 15829 - Hashing  (0) 2025.01.22