본문 바로가기

알고리즘

(158)
파이썬) 로봇 청소기 - BOJ https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net import sys input = sys.stdin.readline graph = [] dr = [-1, 0, 1, 0] dc = [0, 1, 0, -1] n, m = map(int, input().split()) r, c, d = map(int, input().split()) for _ in range(n): graph.append(list(ma..
파이썬) 시험 감독 -BOJ https://www.acmicpc.net/status?user_id=dlwnsgml203&problem_id=13458&from_mine=1 채점 현황 www.acmicpc.net n = int(input()) arr = list(map(int, input().split())) a, b = map(int, input().split()) cnt = 0 for i in range(n): if arr[i]
파이썬) 일곱 난쟁이 - BOJ https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net from itertools import combinations arr = [] for _ in range(9): arr.append(int(input())) for talls in combinations(arr, 7): # 일곱 난쟁이의 키는 중복되지 않으니 조합으로 만들어준다 if sum(talls) == 100: answer = sorted(talls, key=lambda x: x) for i in a..
파이썬) 로봇 프로젝트 - BOJ https://www.acmicpc.net/problem/3649 import sys input = sys.stdin.readline while True: try: x = int(input()) * 10000000 n = int(input()) lego = [int(input()) for _ in range(n)] lego.sort() i, j = 0, n-1 flag = True while i < j: if lego[i] + lego[j] == x: print('yes %d %d' %(lego[i], lego[j])) flag = False break elif lego[i] + lego[j] < x: i += 1 else: j -= 1 if flag: print('danger') except: brea..
파이썬) 최대 힙 - BOJ https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 힙은 흔히 최소값을 출력하고 제거할 수 있다. 그렇다면 힙을 이용해 최대값을 출력할 수 있을까? 정답은 바로 아래 코드이다 import heapq import sys input = sys.stdin.readline n = int(input()) heap = [] for _ in range(n): x = int(input()) if x == 0: if not heap: pri..
파이썬) 회전초밥 - BOJ https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 이 문제는 꽤나 까다로웠다. 문제 이해와 풀이에는 무척 쉬웠지만 시간초과가 많이 발생하는 문제였다. 우선 처음 제출한 코드이다. from collections import deque import sys input = sys.stdin.readline n, d, k, c = map(int, input().split()) arr = [] for _ in rang..
파이썬) 비슷한 단어 - BOJ https://www.acmicpc.net/problem/2607 2607번: 비슷한 단어 첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이 www.acmicpc.net from copy import deepcopy from collections import Counter n = int(input()) answer = 0 arr = [] for i in range(n): s = input() if i == 0: for j in s: arr.append(j) else: cop = deepcopy(arr) new = [j for j in s] cnt = 0 for ..
파이썬) 공유기 설치 - BOJ https://www.acmicpc.net/problem/2110 n, c = map(int, input().split()) arr = [] for i in range(n): arr.append(int(input())) arr.sort() start = 1 end = arr[-1] - arr[0] #최대거리 answer = 0 while start = last + mid: #거리가 mid만큼 떨어져잇다면 cnt += 1 last = arr[i] if cnt >= c: #설치한게 주어진 조건보다 작거나 같으면 #거리를 더 줄여도 됨 start = mid + 1 answer = mid else: #반대라면 거리를 좀 늘려야 됨 end = mid - 1 print(answer) 이 문제는 무엇을 mid로 둘지..