목록algorithm/baekjoon (96)
하루일문
문제 11060번: 점프 점프 재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 www.acmicpc.net 코드 import sys from collections import deque input = sys.stdin.readline sys.setrecursionlimit = 10**6 def dist(A, visited): q = deque([(0, A[0])]) while q: i, jump = q.popleft() for j in range(1, jump + 1): if i + j >= N or visited[i + j] != 0: continue..
문제 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 답을 보기 쉬울 것 같길래 도전했다 큰코다쳤다. 문제 자체는 이중for문으로 답 자체는 볼 순 있지만, 시간 복잡도에 걸리기때문에 시간초과가 뜬다. 그래서 stack을 이용했는데, stack 방법에서도 상다히 애를 먹었다 코드 정답 코드 import sys input = sys.stdin.readline n = int(input()) li = list(map(int, input().split())) stack = [0] answer = [-1] * n for i in ..
문제 14716번: 현수막 혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라. www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline dx = [1, 1, 1, 0, 0, -1, -1, -1] dy = [-1, 0, 1, -1, 1, 1, 0, -1] def DFS(graph, visited, i, j): visited[i][j] = True for _ in range(8): X = i + dx[_] Y = j + dy[_] if 0
문제 11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 코드 import sys input = sys.stdin.readline s = input().strip() dic = {} for i in range(len(s)): for j in range(i+1, len(s)+1): if s[i:j] not in dic: dic[s[i:j]] = 1 else: dic[s[i:j]] += 1 print(len(dic)) 해설 문자를 다 받아서 딕셔너리에 넣어서 딕셔너리 개수를 구했다.
문제 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 코드 import sys input = sys.stdin.readline N = int(input()) card = list(map(int, input().split())) M = int(input()) card2 = list(map(int, input().split())) dic = {} for i in card: dic[i] = 0 for i in card2: if i in dic: print(1, end=" ") else:..
문제 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 코드 replace import sys input = sys.stdin.readline stick = input().strip() stick=stick.replace("()", "0") open = 0 st_c = 0 for i in stick: if i == "0": st_c += open elif i == "(": open += 1 elif i == ")": open -= 1 st_c += 1 print(st_c) stack import sys input = sys..
문제 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 코드 import sys input = sys.stdin.readline S = map(str, input()) s_li = [] i = "" a = "" space = " " for s in S: if s == "": i += s s_li.append(i) i = "" elif i: i += s else: if s == " " or s == "\n": s_li.append(a[::-1]) s_li.append(space) a..
문제 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net DFS BFS 재귀방식으로 풀 수 있다. 주의 런타임 에러 (RecursionError)가 발생한다면 재귀함수 특성상 최대깊이가 깊어져서 발생하는 것이니 아래 코드를 꼭 넣어주자! import sys sys.setrecursionlimit = 10**6 코드 DFS import sys input = sys.stdin.readline sys.setrecursionlimit = 10**6 def dfs(graph, visited, i, j): global Y, X for ..