5597 과제 안 내신 분..?
문제
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
입력
입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.
출력
출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.
import sys
num = list(range(1, 31))
for i in range(28):
num.remove(int(sys.stdin.readline()))
print(num[0], num[1])
코드 풀이
문제를 푸는 과정은 다음과 같다.
1. 1부터 30까지 담긴 리스트를 생성한다.
2. 28개의 정수를 입력 받아 1번의 리스트에서 삭제한다.
3. 입력이 끝난 후 남아있는 리스트 요소를 순서대로 출력한다.
list(range(1, 31))을 통해 1부터 30까지 담긴 리스트를 간단하게 만들 수 있다. 혹은 리스트 컴프리헨션을 사용해 num = [x for x in range(1, 31)]로 작성할 수도 있다. sys.stdin.readline()을 통해 입력받은 값을 int 함수로 정수 타입 변환한다. 입력과 동시에 remove 메서드를 사용해 기존 리스트에서 입력값을 삭제했다. 이렇게 하면 입력값 리스트를 생성해 두 리스트를 비교하는 것보다 시간이 단축된다. 입력-삭제 과정을 for문을 통해 28번 반복한다. 반복이 끝나면 리스트에 남아있는 인자를 차례로 출력한다. 처음에 1부터 30까지 차례로 담긴 리스트를 생성했기 때문에 무작위로 값을 입력받아 삭제해도 기존 리스트의 순서는 변하지 않는다. 값이 2개만 남았기 때문에 for문을 사용해 요소를 가져오지 않고 인덱싱으로 값을 가져왔다.
3052 나머지
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
import sys
nums = []
for i in range(10):
n = int(sys.stdin.readline())
nums.append(n % 42)
print(len(set(nums)))
코드 풀이
sys.stdin.readline() 로 입력받은 값에 int 함수를 사용해 정수 변환하여 n이라는 변수에 할당한다. 이번에도 마찬가지로 입력값을 바로 저장하지 않았다. 입력값 n을 42로 나눈 나머지를 미리 선언해둔 리스트 nums에 추가하는 과정을 10번 반복한다. set은 코딩 테스트 언어로 파이썬을 추천하는 이유 중 하나로 간단하게 중복값을 제거할 수 있다. 서로 다른 나머지의 수를 출력하기 위해 반환된 mutable 객체에 len 함수를 사용해 길이를 세서 출력했다.
SQL 문제를 푸느라 python 문제와 조금 멀어졌다. 이것저것 준비할 게 많은데 전부 기초 단계에 머물고 있어서 이래도 괜찮은 건가 싶다.
'코딩 테스트' 카테고리의 다른 글
백준 10813 공 바꾸기 파이썬 1차원 배열 풀이 (1) | 2024.04.07 |
---|---|
백준 10810 공 넣기 파이썬 배열 풀이 (0) | 2024.04.04 |
백준 2750 파이썬 정렬 풀이 (0) | 2024.04.02 |
백준 10818, 2562 파이썬 1차원 배열 풀이 (0) | 2024.04.01 |
백준 10807, 10871 파이썬 1차원 배열 풀이 (0) | 2024.03.28 |