풀다가 arr.sort() 가 생각이 안나서 직접 정렬을(?) 했다
num = int(input())
arr = []
sorted_arr = []
for i in range(num) :
arr.append(int(input()))
while len(arr)!=0 :
a = min(arr)
sorted_arr.append(a)
arr.pop(arr.index(a))
for j in sorted_arr :
print(j)
하다보니 sort() 와 sorted() 가 있는데 헷갈려서 다른 블로그들을 참고하여 알아보았다.
- sort() : 원래 리스트에 영향을 줌
- sorted() : 정렬한 새로운 리스트가 반환되며, 원래 리스트에는 영향을 주지 않는다
참고로 둘다 기본은 오름차순 이며 내림차순을 원한다면
sort(reverse = True) 로 작성해준다
num = int(input())
arr = []
for i in range(num) :
x, y = map(int, input().split())
arr.append([x,y])
arr.sort()
for i in arr :
print(i[0],i[1])
영어일 경우 대문자 -> 소문자 로 정렬된다 (만약 대소문자 말고 문자 자체로 비교하고 싶으면 lower() 사용하도록)
arr = ['a' , 'A', 'b' , 'D']
arr.sort()
print(arr)
# ['A', 'D', 'a', 'b']
arr = ['b', 'ab', 'cbc']
arr.sort()
print(arr)
# ['ab', 'b', 'cbc']
arr.sort(key=len)
print(arr)
# ['b', 'ab', 'cbc']
예를 들어 문자열인 경우 그냥 기본적인 sort() 를 사용하면 abc 순으로 되지만
key = 함수 를 작성하면 정렬한 키를 반환하는 함수를 기준으롤 정렬된다.
key는 lambda 를 사용하여 나타낼 수 있다
lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
lst.sort(key=lambda x:x[0])
print(lst)
# [[1, 2], [1, 3], [2, 1], [3, 4], [3, 2]]
만약 내림차순으로 하고 싶다면 - 를 붙인다
lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
lst.sort(key=lambda x:-x[0])
print(lst)
key 가 여러개 일 경우
(첫번째 요소 먼저 비교하고 만약 같으면 두번째 요소 비교하도록)
arr = ['abb', 'acc', 'bcd']
sorted(arr, key=lambda x : (x[0], x[1]))
위의 개념을 이용하여 풀이하였다
num = int(input())
arr = []
for i in range(num) :
age, name = input().split()
age = int(age)
arr.append([age, i, name])
arr.sort(key = lambda x : ( x[0], x[1]))
for i in arr :
print(i[0], i[2])
.
.
.
.
.
왜 정답률이 낮는가 했더니 다 이유가 있었다. 메모리 초과의 문제이다..!!
일단 평소대로 코드를 푸는 방법이 메모리 초과가 나오는 이유는 ..
이 문제의 핵심은 N 값이 10000 보다 작거나 같은 자연수라는 점이다
그러므로 이 문제는 다음과 같이 푸는 것이 좋다
- N 값이 최대 10000이 될 수 있으므로 먼저 10000개의 0이 들어있는 리스트를 만든다 (이때, 10001인 이유는 배열 인덱스는 0부터 시작하고 마지막 인덱스 숫자는 ( 전체 길이-1 ) 이기 때문이다 !)
- N을 입력을 받을 때 해당 입력값을 배열에 같은 인덱스에 +1 을 해준다. 예를들어 3을 한번 입력 받았다면 arr[3] 은 1, 9를 두번 입력받았다면 arr[9]는 2가 된다
- 마지막에 arr을 돌면서 해당 인덱스의 값이 0이 아니라면 값만큼 루프를 돌려서 해당 인덱스 숫자를 출력하도록 한다
import sys
num = int(sys.stdin.readline())
arr = [0]*10001
for _ in range(num) :
n = int(sys.stdin.readline())
arr[n] += 1
for i in range(len(arr)) :
if arr[i] != 0 :
for _ in range(arr[i]) :
print(i)