안경잡이 구루루

백준 5597 (과제 안 내신 분..?) [Python/파이썬] (난이도 ★★☆☆☆) 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 5597 (과제 안 내신 분..?) [Python/파이썬] (난이도 ★★☆☆☆)

구루루(gururu) 2023. 8. 22. 12:17
반응형

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

 

5597번: 과제 안 내신 분..?

X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데,

www.acmicpc.net

 


나:

all = list(range(1, 30+1))
for i in range(28):
    submit = int(input())
    all.remove(submit)

for j in all:
    print(j)

완성된 코드는 위와 같다.

 

(1)
all = list(range(1, 30+1))

총 학생수는 30명이고 각 학생별 1번부터 30까지 연속으로 출석번호가 붙어 있기 떄문에 list, range 이용 30까지 나타냄.

이때 range는 끝자리를 포함하지 않기 때문에 +1 사용함

 

(2)
for i in range(28):
    submit = int(input())
    all.remove(submit)

입력받을 제출자는 총 28명으로 고정되어 있기 때문에 range(28)로 매개변수 설정함.

입력은 한줄에 하나씩 제출되고 위에서 만든 int형 출석번호에서 입력된 출석번호를 하나씩 제거하는 remove함수 사용. 이때 순서는 유지된채 제거 되기 때문에 나중에 순서를 조정할 필요가 없음

 

(3)
for j in all:
    print(j)

최종적으로는 제출하지 않은 출석번호가 작은 수,큰수 순서로 all 리스트에 남게 되고 이를 한줄에 하나씩 출력함


다른사람:

ex. https://unie2.tistory.com/582

data = [0] * 31

for i in range(28) :
  n = int(input())
  data[n] = 1

for i in range(1, 31) :
  if data[i] == 0 :
    print(i)

완성된 코드는 위와 같다.

위 코드들은 직접적인 숫자를 사용하지 않고 0과 1로 구분한다는 점이 특이해서 가져왔다.

 

(1)
data = [0] * 31

for i in range(28) :
  n = int(input())
  data[n] = 1

data 라는 리스트를 구성해 모두 0으로 초기값을 갖는다.

이후 총 28개 입력을 받고 그 입력받은 숫자에 해당하는 data 리스트 각 요소들 위치의 값을 0에서 1로 바꿈

 

(2)
for i in range(1, 31) :
  if data[i] == 0 :
    print(i)

for 반복문을 이용해 입력과정 중에 1로 바뀌지 않은 0 값을 가진 위치들의 인덱스를 반환한다.

반응형