2023. 2. 8. 13:20ㆍ백준/파이썬
X대학 M교수님은 프로그래밍 수업을 맡고 있다.
교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
나의 정답:
방법 1)
import sys
input = sys.stdin.readline
num = []
for i in range(28):
num.append(int(input()))
absent = []
for j in range(1, 31):
if j not in num:
absent.append(j)
print(min(absent))
print(max(absent))
num 리스트를 생성하고
첫 for문을 통해서 입력값을 28번 받아서 num list 안에 넣어줬습니다.
과제를 내지 않은 두 학생을 리스트에 담기 위해서
absent 리스트를 생성했습니다.
두번째 for문으로 인해
j에 1부터 30까지의 숫자가 대입되고
num 리스트 안에 j가 없는지 조건을 따진 뒤 num 리스트에 없다면
j를 absent 리스트에 추가 시켜줍니다.
for문이 끝나면 absent 리스트에 두 학생이 리스트에 담겨 있겠죠.
두 학생 중 출석번호가 낮은 학생, 높은 학생을 비교할 거고
모든 학생의 출석번호는 중복되지 않으니
min() , max()를 통해 최소, 최대값을 구해주는 것으로 했어요.
그런데 만약 min(), max()를 사용하지 않으려면 어떻게 하면 좋을지 생각해봤습니다.
방법2)
import sys
input = sys.stdin.readline
num = []
for i in range(28):
num.append(int(input()))
absent = []
for j in range(1, 31):
if j not in num:
absent.append(j)
if absent[0] < absent[1]:
print(absent[0])
print(absent[1])
elif absent[0] > absent[1]:
print(absent[1])
print(absent[0])
이렇게 if문으로 absent 리스트 속 원소의 크기를 비교해서 출력해줬습니다.
근데 불편하죠..
방법 3)
리스트를 하나만 만드는 방법입니다.
import sys
input = sys.stdin.readline
num = [i for i in range(1,31)]
for i in range(28):
num.remove(int(input()))
print(min(num))
print(max(num))
연속하는 정수로 이루어진 리스트를 만들어줄 때
리스트 컴프리헨션을 사용하면
한줄로 두 가지 일을 할 수 있습니다.
1. 리스트 생성하기
2. 원소값 채우기
num = [i for i in range(1,31)]
원래라면
num = []
for i in range(1,31):
num.append(i)
이렇게 세 줄을 써줬을 텐데
리스트 컴프리헨션을 이용해서
한줄 안에 써줄 수 있습니다.
.remove()
.remove()를 사용했습니다.
num 리스트는 1~30에 해당하는 30개의 원소가 담긴 리스트입니다.
입력받은 28개의 값을 이 리스트 안에서 제거해주면
과제를 안 낸 학생들만이 num 리스트에 남게 됩니다.
그 리스트 내에서 출석번호 최대 최소값 구해서 출력해줍니다.
리스트 원소 삭제 세가지
del, .remove(), .pop()
1. del 명령어
del list_name[index]
리스트의 인덱스를 받아서 삭제합니다.
2. .remove()
list_name.remove(element)
인덱스가 아닌 삭제하려는 값을 받아서 삭제합니다.
3. .pop()
list_name.pop(index)
인덱스를 받아서 그 자리에 있는 원소를 꺼내줍니다.
'백준 > 파이썬' 카테고리의 다른 글
[ 백준 문제 1546 / 파이썬 ] 평균 (0) | 2023.02.08 |
---|---|
[ 백준 문제 3052 / 파이썬 ] 나머지 (0) | 2023.02.08 |
[ 백준 문제 2562 / 파이썬 ] 최댓값 (0) | 2023.02.08 |
[ 백준 문제 10818 / 파이썬 ] 최소, 최대 (0) | 2023.02.07 |
[ 백준 문제 10871 / 파이썬 ] X보다 작은 수 (0) | 2023.02.07 |