13300번 - 방 배정

의혁·2025년 1월 18일
0

[Algorithm] 알고리즘

목록 보기
17/50

💡 dictionary를 잘 사용하자!!

N, K = map(int, input().split(' '))

dic = dict({10:0, 11:0, 20:0, 21:0, 30:0, 31:0,
40:0, 41:0, 50:0, 51:0, 61:0, 60:0})

cnt = 0

for _ in range(N):
    
    S, Y = map(int, input().split(' '))
    
    dic[10*Y + S] += 1

for key in dic:
    
    if dic[key] % K != 0:
        cnt += dic[key] // K + 1
    else:
        cnt += dic[key] // K

print(cnt)
  • 학년과 성별로 배정받을 수 있는 방의 종류가 다 달랐기 때문에 dictionary를 사용하여 종류에 따라 방을 나눠주었다.
  • 남자는 1 여자는 0, 학년은 1학년부터 6학년이기 때문에 dictionary의 key값을 학년+성별로 두었다. ( ex. 4학년 남자: 41 / 2학년 여자: 20 )
  • 값을 받으면 해당하는 key값의 value를 1씩 증가시켜주고, 총 방의 갯수는 한방에 들어갈 수 있는 수로 나눠주면서 갯수를 세어주었다.
  • 해당 key값의 value를 한 방에 허용되는 사람의 수 K로 나눠서 나머지가 존재하면 방의 갯수를 1개 늘려주고 아니면 나머지의 몫만 더해주는 방식으로 진행하였다.

💡 코딩스터디 중 나온 기발한 접근방식

  • 혜진님
import math

n, k = map(int, input().split())
arr = [[0] * 7 for _ in range(2)]   # 성별과 학년을 담는 2차원 배열 생성

for _ in range(n):
    s, g = map(int, input().split())
    arr[s][g] += 1      # 성별에 해당하는 학년 인덱스 값을 +1
    
result = 0

for i in range(2):
    for j in range(7):
        result += math.ceil(arr[i][j] / k)
        
print(result)

dictionary를 사용하지 않고 2차원 배열을 사용해서 푸는 방식을 사용하셨다.
개인적으로는 dictionary를 이용해서 푸는 방식이 조금 더 직관적이여서 좋았다.

profile
매일매일 차근차근 나아가보는 개발일기

0개의 댓글