Algorithm Study/Python

[백준 파이썬] #13300 방 배정

728x90
반응형

Bronze II

# 13300 방 배정

https://www.acmicpc.net/problem/13300

 

13300번: 방 배정

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 수학여행에 참가하는 학생 수를 나타내는 정수 N(1 ≤ N ≤ 1,000)과 한 방에 배정할 수 있는 최대 인원 수 K(1 < K ≤ 1,000)가 공백으로 분리되어

www.acmicpc.net

  • 자료구조 '배열' 문제

 

내 풀이_틀렸습니다

# 틀린 풀이_스스로 이해하기 어려운 구조 사용

import math

room = []
cnt = 0

for i in range(6):
    grade = []
    for j in range(2):
        grade.append(0)
    room.append(grade)

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

for i in range(N):
    S, Y = map(int, input().split())
    room[Y-1][S] += 1

for i in room:
    for j in i:
        math.ceil(j/K)
        cnt += j
print(cnt)

# Q.조언?
# A. math ceil 사용해서 올림 적용
  • ceil을 이용할 것을 조언받았으나 구조를 정확하게 이해하지 못한 듯 하다.
  • 아직 행렬을 구성해서 푸는 문제에 약함을 보인다.

 

스터디원의 풀이

# ㅇㅁ's solution

import math # ceil을 이용해 올림 처리 적용을 위함

N, K = map(int, input().split()) # N: 참가 학생 수, K: 한 방당 최대 인원 수
P = [[0]*2 for i in range(6)] # 학년별, 성별 방 구성
R = 0

for i in range(N):
    S, Y = map(int, input().split()) # S: 성별, Y: 학년
    if S == 1:
        P[Y-1][1] += 1 # 학년에 맞는 남학생 수 추가
    else:
        P[Y-1][0] += 1 # 학년에 맞는 여학생 수 추가

for i in range(6):
    R += math.ceil(P[i][0]/K) # '인원/최대인원 수'를 올림해서 R에 추가
    R += math.ceil(P[i][1]/K)

print(R)
  • P[m][n] 형태를 사용한 것이 눈에 띈다 : 내가 시도했던 방식보다 이해하기 쉬운 형태를 이용