
2750 수 정렬하기
N = int(input())
arr = []
for i in range(N):
arr.append(int(input()))
arr.sort()
print('\n'.join(map(str, arr)))
- Enter 간격으로 들어오는 1차원 배열 입력받기
- 리스트를 특정 조건에 맞게 출력하기 - join 함수 이용 # join함수는 내부 요소들이 str이어야 함!
2587 대표값2
arr = []
for _ in range(5):
arr.append(int(input()))
arr.sort()
print(int(sum(arr)/5))
print(arr[2])
25305 커트라인
N, k = map(int, input().split())
arr = list(map(int, input().split()))
arr.sort()
print(arr[-k]) # 98
# print(arr[-k:-k+1]) # [98]
- arr[-k:-k+1]로 출력하니 [] 대괄호 없이 출력이 안됨 -> 인덱싱 슬라이싱은 항상 리스트를 반환
- 인덱싱(arr[-k])은 리스트의 특정 값을 직접 반환
2751 수 정렬하기2
import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(N):
arr.append(int(input()))
arr.sort()
print('\n'.join(map(str, arr)))
💡 카운팅 정렬
count = [0, 0, 0, 0, 0, 0]
숫자 2 → count[2] += 1 → count = [0, 0, 1, 0, 0, 0]
숫자 3 → count[3] += 1 → count = [0, 0, 1, 1, 0, 0]
숫자 2 → count[2] += 1 → count = [0, 0, 2, 1, 0, 0]
숫자 5 → count[5] += 1 → count = [0, 0, 2, 1, 0, 1]
숫자 3 → count[3] += 1 → count = [0, 0, 2, 2, 0, 1]
- 숫자의 개수를 세는 배열을 만들어 정렬하는 간단한 방법이다! 숫자 범위가 좁고 정수로만 이루어진 데이터에서 매우 효율적이다.
- 데이터의 등장 횟수를 센다: 각 숫자가 몇 번 등장했는지 기록하는 배열(카운트 배열)을 사용한다.
- 카운트 배열을 기반으로 데이터를 출력: 등장 횟수만큼 해당 숫자를 출력하면 정렬된 결과가 나온다.
10989 수 정렬하기3
- 수 정렬하기2와 동일하게 제출하면 '메모리 초과'
- 힌트 >> 수의 범위가 작다면 카운팅 정렬을 사용하여 더욱 빠르게 정렬할 수 있습니다.
import sys
input = sys.stdin.readline
N = int(input())
count = [0] * 10001 # 입력값이 10000개까지 주어지니 10000 + 1개의 리스트 선언
# 등장 횟수를 누적합으로 구하기
for _ in range(N):
input_num = int(input())
count[input_num] += 1
# 인덱스 데이터만 출력
for i in range(len(count)):
for j in range(count[i]):
print(i)
1427 소트인사이드
import sys
input = sys.stdin.readline
arr = list(map(int, input().strip()))
arr.sort()
print(''.join(map(str,arr[::-1])))
- [ ] 대괄호 없이 출력: ''.join(map(str, list))
11650 좌표 정렬하기
import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
arr.sort()
for i in range(N):
print(' '.join(map(str, arr[i])))
11651 좌표 정렬하기2
import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
# y좌표, x좌표 순서로 정렬
arr.sort(key=lambda x: (x[1], x[0]))
# arr.sort(key=lambda x: x[1])
for i in range(N):
print(' '.join(map(str, arr[i])))
- sort(key = lambda x: (x[1], x[0]): 다중 조건 정렬은 key를 이용
1181 단어 정렬
import sys
input = sys.stdin.readline
N = int(input())
arr = []
new_arr = []
for _ in range(N):
arr.append(list(input()))
arr.sort()
arr.sort(key=lambda x: (len(x)))
for i in arr:
if i not in new_arr:
new_arr.append(i)
for i in range(len(new_arr)):
print(''.join(map(str, new_arr[i])), end='')
- 리스트 중복 제거: 기존 리스트 반복하며 새로운 리스트에 없으면 넣어줌
- 개행문자 제거하여 출력: end = ''
10814 나이순 정렬
import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(N):
arr.append(list(input().split()))
for i in range(N):
arr[i][0] = int(arr[i][0])
arr.sort(key=lambda x: x[0])
for i in range(N):
print(' '.join(map(str, arr[i])))
💡 좌표 압축
ex. 2, 4, -10, 4, -9
1. 중복을 제거하고, 값을 오름차순 정렬:
-10, -9, 2, 4
2. 각 값에 순위를 부여:
-10 -> 0
-9 -> 1
2 -> 2
4 -> 3
3. 원래 리스트에서 각 값의 순위를 찾아 변환:
2 -> 2
4 -> 3
-10 -> 0
4 -> 3
-9 -> 1
출력: 2 3 0 3 1
- 좌표 압축은 큰 범위의 숫자 값을 작은 범위의 숫자로 변환하는 방법
- 주어진 좌표를 크기순으로 정렬하여 상대적 순위를 계산
- 순위를 기준으로 좌표를 변환(압축)한 결과를 출력
- 즉, 작은 값부터 시작해 0부터 인덱스를 부여
💡 enumerate 함수
enumerate(iterable, start=0)
# iterable: 반복 가능한(iterable) 객체, 예를 들면 리스트(list), 튜플(tuple), 문자열(str), 딕셔너리(dictionary) 등
# start: 인덱스의 시작값을 설정, 기본값은 0
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"과일 리스트에서 {i} 인덱스 요소는 {fruit} 이다")
#출력
#과일 리스트에서 1 인덱스 요소는 apple 이다
#과일 리스트에서 2 인덱스 요소는 banana 이다
#과일 리스트에서 3 인덱스 요소는 cherry 이다
- "enumerate" 함수는 주로 for 루프와 함께 사용
- for 루프는 반복 가능한(iterable) 객체를 순회하면서, 각 요소를 처리
- 반복 가능한(iterable) 객체를 인자로 받아서 해당 객체의 요소들을 순회하면서, 각 요소의 인덱스와 값을 순서쌍으로 반환
18870 좌표 압축
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
# 중복 제거 후 정렬
sorted_unique = sorted(set(arr))
# 각 값을 순위(0부터 시작)로 매핑하는 딕셔너리를 생성
index_map = {value: idx for idx, value in enumerate(sorted_unique)}
# 원래 배열의 값을 순위로 변환하여 새로운 배열을 생성
result = [index_map[value] for value in arr]
print(' '.join(map(str, result)))
- enumerate(): 각 요소의 인덱스와 값을 순서쌍으로 반환
- 값 -> 순위로 매핑: value: idx
'알고리즘' 카테고리의 다른 글
| 💻 [백준][파이썬] 단계별로 풀어보기 - 스택, 큐, 덱(28278, 10773, 9012, 18258, 2164, 11866, 28279, 2346) (0) | 2024.12.12 |
|---|---|
| 💻 [백준][파이썬] 단계별로 풀어보기 - 집합과 맵(10815, 14425, 7785, 1269, 11478) (0) | 2024.12.09 |
| 💻 [백준][파이썬] 단계별로 풀어보기 - 2차원 배열 모음(2783, 2566, 10798, 2563) (1) | 2024.12.03 |
| 💻 [백준-2667] python3 단지 번호 붙이기 (0) | 2024.12.02 |
| 💻 [백준 - 2606] Python3 바이러스 (2) | 2024.11.27 |