본문 바로가기

알고리즘

(24)
[BOJ/백준] 5014번 스타트링크 | BFS | 파이썬 문제 풀이 from collections import deque F, S, G, U, D = map(int, input().split()) visited = [0] * (F + 1) def bfs(visited, v): queue = deque([v]) dx = [U, - D] while queue: x = queue.popleft() if x == G: break for i in range(len(dx)): # 해당하는 층이 없을 때 움직이지 않는다 if dx[i] == 0: continue nx = x + dx[i] if 0 역시 엘리베이터 버튼을 누르지 않아도 된다(반복문에서 continue) 5014번: 스타트링크 첫째..
[프로그래머스] Level 2 k진수에서 소수 개수 구하기 | 파이썬 (👀10진수 변환하기) 문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우 0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우 P처럼 소수 양쪽에 아무것도 없는 경우 단, P는 각 자릿수에 0을 포함하지 않는 소수입니다. 예를 들어, 101은 P가 될 수 없습니다. 예를 들어, 437674을 3진수로 바꾸면 211020101011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다. (211, 2, 11을 k진법으로 보았을 때가 아닌, 10진..
[프로그래머스] Level 1 모의고사 | 파이썬 | 완전탐색 (🌟 itertools.cycle 사용하기) 문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작..
[BOJ/백준] 10799번 쇠막대기 | 스택 | 파이썬 문제 풀이 import sys def cutIron(bar): stack = [] cnt = 0 for i in range(len(bar)): if bar[i] == '(': stack.append('(') elif bar[i] == ')': if bar[i-1] == '(': stack.pop() cnt += len(stack) else: stack.pop() cnt += 1 return cnt bar = list(sys.stdin.readline()) print(cutIron(bar)) 스택 자료구조를 사용한 문제. 입력으로 받은 문자열을 리스트 bar로 바꿔 쇠막대기 개수를 세는 함수 cutIron에 넣었다. bar의 길이만큼 반복문을 수행한다. 1) bar[i] 값이 '('이면 쇠막대기의 시작을 ..
[BOJ/백준] 2630번 색종이 만들기 | 분할정복 | 파이썬 문제 풀이 import sys def cutPaper(x, y, n): # x,y좌표와 색종이 크기 global cnt_white, cnt_blue print(x, y, n) for i in range(x, x+n): for j in range(y, y+n): if paper[x][y] != paper[i][j]: cutPaper(x, y, n//2) cutPaper(x, y+n//2, n//2) cutPaper(x+n//2, y, n//2) cutPaper(x+n//2, y+n//2, n//2) return # 호출한 함수는 중복되지 않도록 종료시킴 if paper[x][y] == 1: cnt_blue += 1 else: cnt_white += 1 n = int(input()) paper = [list..
[BOJ/백준] 5430번 AC | 덱 | 파이썬 문제 풀이 import sys from collections import deque T = int(sys.stdin.readline()) for _ in range(T): func = list(sys.stdin.readline().rstrip()) n = int(sys.stdin.readline()) queue = deque(sys.stdin.readline().rstrip()[1:-1].split(",")) if n == 0: queue = deque() error = False cnt_R = 0 for i in range(len(func)): if func[i] == 'D': if queue: if cnt_R % 2 == 1: queue.pop() else: queue.popleft() else: e..
[BOJ/백준] 10828번 스택 | 파이썬 (🌠sys.stdin.readline으로 시간 초과 해결) 문제 풀이 import sys n = int(sys.stdin.readline()) stack = [] for i in range(n): cmd = sys.stdin.readline().strip() if 'push' in cmd: stack.append(cmd[5:]) elif cmd == 'pop': if len(stack) == 0: print(-1) else: print(stack.pop()) elif cmd == 'size': print(len(stack)) elif cmd == 'empty': if len(stack) == 0: print(1) else: print(0) elif cmd == 'top': if len(stack) == 0: print(-1) else: print(stack[-1..
[BOJ/백준] 1697번 숨바꼭질 | BFS | 파이썬 문제 풀이 from collections import deque def bfs(start, end): queue = deque() queue.append(start) while queue: x = queue.popleft() if x == end: return visited[x] for nx in (x-1, x+1, x*2): if 0