Study/Algorithm
백준 13458: 시험감독
jhin.lee
2019. 9. 9. 09:27
문제
https://www.acmicpc.net/problem/13458
풀이
만약 시험장에 있는 응시자의 수(x)가 총감독관이 관리 가능한 수(A) 보다 작거나 같다면, 시험장에는 총 감독관 1명이 필요할 것이다. 만약 크다면 2가지 경우가 있다.
1. x-A를 부감독관이 관리 가능한 수(B)로 나눴을 때 나머지가 0인경우
2. 나머지가 0 이상인 경우
나머지의 몪에 1의 경우 0, 2의 경우 1을 더한다.
코드
숏코딩 분석
내 코드는 내 코드지만 남이 잘한 코드를 분석하는게 공부가 제일 많이 되는 것 같다.
백준의 코드골프 네임드인 sait2000 님의 코드다. (분석을 위해 ;를 개행으로 바꿨다.)
input()
a,[b,c]=eval('map(int,input().split()),'*2)
print(sum(1-min(0,(b-n)//c)for n in a))
파이썬에서는 배열을 입력받을 때 굳이 배열의 길이를 알 필요가 없다. 따라서 N을 사용하지 않으므로 값을 저장하지 않았다.
내가 map 구문을 2번 반복한데 비해 eval함수를 이용해 한번에 값을 받았다.
eval을 풀어서 쓰면 다음과 같다.
a,[b,c] = map(int,input().split()), map(int,input().split()),
이해가 안되는 부분은 마지막 쉼표가 에러를 발생시키지 않는 부분이다. (실제로 실험해보니 예외가 발생하지 않는다)
대괄호를 써서 각각의 map object를 원하는 대로 입력시키는 부분은 좋은 구문인 것 같다.
0인경우를 체크할 때 min을 쓰는 거는 진짜 상상도 못한 구문이다.
n-b가 아니라 일부러 b-n을 하여서... 음수를 받아오는 구문? 와 정말... 아름답다
list comprehension구문을 대괄호로 안 감싸고 이런 방법으로 사용할 수 있는것도 처음 알았다.