PYTHON/CodingTest
백준 10989번 파이썬 풀이
횲
2022. 10. 12. 14:59
728x90
문제
답
import sys
n = int(sys.stdin.readline())
n_list = [0] * 10001
for _ in range(n) :
n_list[int(sys.stdin.readline())] += 1
for i in range(10001) :
if n_list[i] != 0 :
for _ in range(n_list[i]) :
print(i)
풀이
- 입력할 수의 개수 n개 입력
- 문제에서 10000개까지만 입력 받는다고 했으니까 리스트를 선언하는데 다 0으로 초기화된 걸로 선언하기
리스트는 0부터 시작하니까 10001로 설정(번거롭기도 하고 헷갈리니까)
- 반복문을 통해 n개만큼 입력을 받는데, 입력 받은 수와 같은 인덱스 부분에 1을 넣어주기
예를 들어서 10개의 인덱스만 받는 리스트가 있다고 했을 때
5개만큼 입력받는데 이때 받는 수가 3, 5, 1, 1, 3이라면
[0, 2, 0, 2, 0, 1, 0, 0, 0, 0, 0] <<< 이런 식으로 인덱스 값을 증가시키는 것이다.
- 여기에서 10001개의 인덱스로 설정된 리스트를 선언했으니까 그만큼 반복문을 통해 돌리기
대신, 0이 나올 필요가 없으니 조건문으로 0이 아닌 부분만 출력하도록 설정하기
그러면 인덱스 값이 0이 아닌 부분 즉 1이거나 2거나 하는 그런 부분만 설정하게 된다
n_list[3]이 2이라는 의미이니까 2만큼 출력해주기 => 3 3
n_list[5]가 1이라는 의미니까 1만큼 출력해주기 => 5
결과
코멘트
원래는 리스트 안에 값을 넣어서 할 생각을 했었지만, 이 문제는 값을 넣는게 아니라
리스트 내의 인덱스 값으로 구별(?)하는 것
input 말고 sys 라이브러리 사용해서
readline()으로 하면 메모리가 더 적게 쓰인다나 뭐라나
끗
728x90