본문 바로가기

PYTHON/CodingTest

백준 10989번 파이썬 풀이

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