Home

[백준] 2884번 알람 시계 _ 문제 풀이

1. 문제 https://www.acmicpc.net/problem/2884 2. 풀이 2.1. 풀이1 h, m = map(int, input().split()) print((h-1)%24 if m-45<0 else h,(m-45)%60) 2.2. 풀이2 a,b = map(int, input().split()) x = a*60 + b-45 print(x//60%24,x%60)

Read more

[백준] 20055번 컨베이어 벨트 위의 로봇 _ 문제 풀이

1. 문제 https://www.acmicpc.net/problem/20055 2. 풀이 삼성 SW 역량테스트 문제입니다. 삼성 문제에서 쉬운 편이라고 하지만 저는 시간초과로 많은 시간을 보냈습니다. 풀이 순서는 아래와 같습니다. 2.1. 시간초과 코드 이 문제를 풀때 자료구조는 리스트만 사용했고, 회전하는 경우에는 queue를 사용하는 것이 아니라 index만 하나씩 증가시켜서 시작점만 갱신해주는 방법을 사용했습니다. 로봇은 list에 들어있고, 들어온 순서대로 자신의 위치를 가지고 있습니다. 처음 푼 문제는 시간초과를 받았습니다. 아래와 같은 예제를 정답 소스코드에 넣어보면 199800 번의 roun...

Read more

[백준] 11286번 절댓값 힙 _ 문제 풀이

1. 문제 https://www.acmicpc.net/problem/11286 2. 풀이 해당 문제는 heap을 이용하여 문제를 해결해야 합니다. heap에 (절대값, 원래값) 을 넣어서 정렬하게 되면, 절대값 순서대로 정렬하고 절대값이 동일한 경우에는 원래값 순서대로 정렬하게 됩니다. 2.1. 시간초과 코드 python 에서 input 을 그대로 이용하면 heap 을 이용하더라도 시간초과가 발생하게 됩니다. 아래의 코드는 pypy로 제출해도 통과하지 못합니다. N = int(input()) arr = [] for _ in range(N): a, b = map(int, input().split()...

Read more

[백준] 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 ...

Read more

[백준] 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)]

Read more

[백준] 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])]

Read more

[백준] 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(...

Read more

[백준] 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) 배열에서 최소 값을 먼저 찾은 후에 앞에 있는 차들을 확인합니다. 앞에 있는 차들은 추월한차이기 때문에 정답에 추가해줍니다. 위에서 찾은 최소 값 이후에 ...

Read more

[백준] 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 __ ...

Read more

[백준] 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...

Read more