[백준] 11651번 좌표 정렬하기 2 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/11651
2. 풀이
파이썬 튜플에 (x, y) 형태로 정렬하면, x를 기준으로 정렬하고 x가 동일한 경우에는 y를 정렬합니다. 튜플에 (y, x) 순서로 입력받은 값을 넣고 정렬하면 손쉽게 문제를 해결할 수 있습니다. 해당 소스코드로는 pypy를 이용하여 제출해야 시간초과가 발생하지 않고 문제가 해결되었습니다.
N = int(input())
arr = []
for _ in range(N):
a, b = map(int, input().split())
arr.append((b,a))
[print(x[1], x[0]) for x ...
[백준] 11650번 좌표 정렬하기 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/11650
2. 풀이
파이썬 튜플에 (x, y) 형태로 정렬하면, x를 기준으로 정렬하고 x가 동일한 경우에는 y를 정렬합니다. 해당 소스코드로는 pypy를 이용하여 제출해야 시간초과가 발생하지 않고 문제가 해결되었습니다.
N = int(input())
arr = []
for _ in range(N):
a, b = map(int, input().split())
arr.append((a,b))
[print(x[0], x[1]) for x in sorted(arr)]
[백준] 10814번 나이순 정렬 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/10814
2. 풀이
python sort 는 기본적으로 stable sort 를 지원하기 때문에, 나이를 기준으로 정렬하면 손쉽게 문제를 해결할 수 있습니다.
N = int(input())
arr = []
for _ in range(N):
a, b = input().strip().split()
arr.append((int(a),b))
[print(x[0], x[1]) for x in sorted(arr, key=lambda x: x[0])]
[백준] 1181번 단어 정렬 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/1181
2. 풀이
중복을 제거해주기 위하여 모든 문자열을 집합(set)에 저장합니다.
저장한 집합을 리스트(list)로 변경한 이후에, (길이, 문자열) 튜플을 생성하여 정렬을 하면 바로 문제가 해결됩니다.
N = int(input())
arr = set()
[arr.add(input()) for _ in range(N)]
arr = sorted([(len(x), x) for x in arr])
[print(x[1]) for x in arr]
아래와 같이 key를 사용해도 문제가 해결 가능합니다.
N = int(input(...
[백준] 2002번 추월 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/2002
2. 풀이
ZG431SN : 0
ZG5080K : 1
ST123D : 2
ZG206A : 3
들어가는 차 번호 문자열을 들어온 순서대로 번호를 매겨줍니다. (0, 1, 2, 3)
ZG206A : 3
ZG431SN : 0
ZG5080K : 2
ST123D : 1
나오는 차 번호 문자열을 매겨진 번호를 확인하여 배열에 집어 넣습니다. (3, 0, 2, 1)
배열에서 최소 값을 먼저 찾은 후에 앞에 있는 차들을 확인합니다. 앞에 있는 차들은 추월한차이기 때문에 정답에 추가해줍니다.
위에서 찾은 최소 값 이후에 ...
[백준] 2696번 중앙값 구하기 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/2696
2. 풀이
배열을 모두 입력 받은 후에, 요구하는 크기만큼 정렬하여 중간값을 출력해주면 쉽게 문제풀이 할 수 있습니다. 하지만 매번 정렬하는데 시간이 매우 걸립니다. 시간을 줄이기 위해서는 최소힙, 최대힙을 이용하여 중간값보다 작은 숫자, 큰 숫자를 따로 저장하고 있다가 매번 힙의 크기를 맞춰주면서 수를 추가해주면 훨씬 더 빠르게 풀이 할 수 있습니다.
T = int(input())
for _ in range(T):
M = int(input())
print(M//2 + 1)
arr = []
for __ ...
[백준] 2304번 창고 다각형 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/2304
2. 풀이
N = int(input())
cols = []
for _ in range(N):
cols.append(list(map(int,input().split())))
cols.sort(key=lambda x: x[0])
# 최대 col 찾기
max_idx = cols.index(max(cols, key=lambda x: x[1]))
answer = cols[max_idx][1]
# 왼쪽. 맨 왼쪽에서부터 최대 인덱스까지 자신과 크기가 작은 얘들은 무시하고, 크거나 같은 얘를 만나면 지붕을 세움
this_idx = 0
f...
[백준] 1269번 대칭 차집합 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/1269
2. 풀이
input().split()
A, B = set(input().split()), set(input().split())
print(len(A^B))
[백준] 2075번 N번째 큰 수 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/2075
2. 풀이
2.1. 메모리 초과 코드
배열 하나에 모든 수를 넣은 뒤에 정렬하고 답을 출력. 메모리 초과가 발생하였습니다.
n = int(input())
arr = []
[arr.extend(list(map(int, input().split()))) for _ in range(n)]
print(sorted(arr)[-n])
2.2. 정답 코드
n개만큼 계속 배열을 추가하면서 정렬하고 추가하는 과정을 반복합니다.
n = int(input())
arr = []
for _ in range(n):
arr.extend(lis...
[백준] 1302번 베스트셀러 _ 문제 풀이
1. 문제
https://www.acmicpc.net/problem/1302
2. 풀이
개수를 딕셔너리를 이용하여 확인해 줍니다. 이후, (-개수, 이름) 으로 만들어진 배열을 정렬하면 개수가 가장 많고 사전순으로 가장 이름이 빠른 요소가 맨 앞에 나오게 됩니다.
n = int(input())
dict = {}
for _ in range(n):
now_str = input()
if dict.get(now_str, 0):
dict[now_str] += 1
else:
dict[now_str] = 1
print(sorted([(-val, key) for key, ...
864 post articles, 87 pages.