Algoritm 43

[BOJ] 10828번: 스택

■ 문제해설 각 기능별로 (push, pop, size, empty, top) 함수로 구현하였고, stack이 비어있는 경우에는 len(stack) == 0을 이용하여 조건문을 구성하였다. ■ 문제해답 import sys input = sys.stdin.readline n = int(input()) stack = [] def push(x): return stack.append(x) def pop(): if len(stack) == 0: return -1 else: return stack.pop() def size(): return len(stack) def empty(): if len(stack) == 0: return 1 else: return 0 def top(): if len(stack) == 0:..

Algoritm/BOJ 2022.09.06

[BOJ] 1107번: 리모콘

■ 문제 해설 - 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우 - range(100001)로 잡은 이유는 +일 경우보다 -일 경우가 더 최적의 해를 가질 수 있기 때문 - 가장 가까운 버튼 + 길이 (가장 가까운 위치만큼 리모콘을 누르기 때문에 +len(channel)) - 브루트 포스 ■문제 해답 import sys input = sys.stdin.readline n = int(input()) m = int(input()) broken = list(map(int, input().split())) min_count = abs(100 - n) # 현재 채널에서 + 혹은 -만 사용하여 이동하는 경우 for channel in range(1000001): channel = str(channel) for..

Algoritm/BOJ 2022.04.20

[BOJ] 1476번: 날짜 계산

■ 문제 해설 - 브루트 포스 - 입력 값이 조건을 충족할 때 까지 while을 통해 반복 - 조건 충족 시 break ■ 문제 해답 import sys input = sys.stdin.readline e_i, s_i, m_i = map(int, input().split()) e, s, m, year = 1, 1, 1, 1 while True: if e_i == e and s == s_i == s and m_i == m: break e += 1 s += 1 m += 1 year += 1 if e >= 16: e = 1 if s >= 29: s = 1 if m >= 20: m = 1 print(year) 문제 출처 : https://www.acmicpc.net/problem/1476 1476번: 날짜 계산..

Algoritm/BOJ 2022.04.20

[BOJ] 3085번: 사탕 게임

■ 문제 풀이 - 행/열의 크기를 리턴하는 함수를 구축 (check) - 크기 비교 후 제일 큰 값 리턴 - 브루트 포스 ■문제 해답 import sys input = sys.stdin.readline def check(board): n = len(board) answer = 1 for i in range(n): # 열 cnt = 1 for j in range(1, n): if board[i][j] == board[i][j - 1]: cnt += 1 else: cnt = 1 # 비교 후 현재 cnt가 더 크다면 answer 갱신 if cnt > answer: answer = cnt # 행 cnt = 1 for j in range(1, n): if board[j][i] == board[j - 1][i]: ..

Algoritm/BOJ 2022.04.20

[BOJ] 2309번: 일곱 난쟁이

■ 문제 풀이 - 브루트 포스 문제 - (9명의 난쟁이의 합 - 100) 한 후 나머지 두명의 합을 찾아내면 됨 ■ 문제 해답 import sys input = sys.stdin.readline arr = list(int(input().rstrip()) for _ in range(9)) result = sum(arr) - 100 num1 = 0 num2 = 0 for i in range(8): for j in range(i + 1, 9): if (arr[i] + arr[j] == result): num1 = arr[i] num2 = arr[j] arr.remove(num1) arr.remove(num2) arr.sort() for i in arr : print(i) 문제출처: https://www.acm..

Algoritm/BOJ 2022.04.20

[BOJ] 1260번: DFS와 BFS

■ 문제 풀이 dfs와 bfs 알고리즘의 정석 풀이 ■ 문제 해답 from collections import deque import sys input = sys.stdin.readline # n = 정점의 개수 / m = 간선의 개수 / v = 시작할 정점 n, m, v = map(int, input().split()) graph = [[] for i in range(n + 1)] for i in range(m): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) visited_dfs = [False] * (n + 1) visited_bfs = [False] * (n + 1) def dfs(v): visited_dfs[v] = ..

Algoritm/BOJ 2022.04.14

[BOJ] 13023번: ABCDE

■ 문제 풀이 그래프의 길이가 4 이상인 경우 조건 충족 (1) 시작하는 지점이 다를 경우 값 또한 달라지므로 완전 탐색으로 진행 dfs를 이용하여 풀이 진행 ■ 문제 해답 import sys input = sys.stdin.readline n, m = map(int, input().split()) # 리스트 행렬 graph = [[] for i in range(n)] for i in range(m): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) visited = [False] * n ans = False # 깊이 탐색 진행 def dfs(v, depth): global ans if depth == 4: ans = True..

Algoritm/BOJ 2022.04.14

[BOJ] 1935번 : 후위 표기식2

■ 문제 풀이 · isalpha() => 문자인지 확인하는 내장 함수 (문자열에 숫자 및 공백이 포함되어 있으면 False 반환) · ord() => 문자의 유니코드 값을 반환 ■ 문제 해답 import sys input = sys.stdin.readline n = int(input()) s = list(input().rstrip()) alpha = [0] * n for i in range(n): alpha[i] = int(input()) # 피연산자 대응 값 stack = [] for i in s: if i.isalpha(): stack.append(alpha[ord(i) - ord('A')]) else: num2 = stack.pop() num1 = stack.pop() if i == '+': sta..

Algoritm/BOJ 2021.09.16

[BOJ] 10799번 : 쇠막대기

■ 문제 해설 · 이전 괄호 (prev) 를 이용해서 해결 · '(' 쇠막대기인 경우 stack에 append · 이전 값 (prev) 와 s[i] 값이 ')'인 경우 => 레이저 1) 괄호를 맞추기 위해 stack에 pop 2) stack에 들어간 쇠막대기 수만큼 더함 · 이전 값 (prev) 와 s[i] 값이 ')'인 경우 => 쇠막대기가 끝난 경우 1) 쇠막대기 절단하여 +1 · 이전 값 (prev) = s[i]로 값 초기화 ■ 문제 해답 import sys input = sys.stdin.readline s = list(input().rstrip()) stack = [] result = 0 prev = None for i in range(len(s)): if s[i] == '(': stack.ap..

Algoritm/BOJ 2021.09.14

[BOJ] 1158번 : 요세푸스 문제

■ 문제풀이 · 동그란 원이라 생각하고 풀면 쉬움 ■ 문제해답 import sys input = sys.stdin.readline n, k = map(int, input().split()) josephus = [] for i in range(1, n + 1): josephus.append(i) result = [] num = k - 1 while len(josephus): if num >= len(josephus): num = num - len(josephus) else: result.append(str(josephus.pop(num))) num = num + (k - 1) print("", sep = '') 문제출처 : https://www.acmicpc.net/problem/1158 1158번: 요세..

Algoritm/BOJ 2021.09.12