Algoritm/BOJ 30

[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

[BOJ] 9093번 : 단어뒤집기

■ 문제풀이 · 리스트[start:stop:step] · 리스트[::-1]은 리스트를 역순으로 구성한 리스트를 반환 · 따라서 split()으로 구분 하여 [::-1] 역순으로 반환 · join 함수 - 매개변수로 들어온 리스트 요소를 하나의 문자열로 변환 - ''.join(리스트) : ['a', 'b', 'c'] 리스트를 => 'abc' 문자열로 합쳐서 반환 - '구분자'.join(리스트) : '_'.join(['a', 'b', 'c']) => 'a_b_c' 문자열로 반환 ■ 문제해답 import sys input = sys.stdin.readline t = int(input()) for _ in range(t): sentence = list(map(list, input().split())) for i..

Algoritm/BOJ 2021.09.08

[BOJ] 10828번 : 스택

■ 문제풀이 · push -> append · pop -> pop · size -> len · top -> stack[-1] 'if not stack:' stack이 비어있을 경우 False를 반환함으로 if not 을 사용하여 print(1) 수행 ■ 문제해답 import sys input = sys.stdin.readline n = int(input()) stack = [] for _ in range(n): data = input().split() if data[0] == 'push': stack.append(data[1]) elif data[0] == 'pop': if not stack: print(-1) else: print(stack.pop()) elif data[0] == 'size': pri..

Algoritm/BOJ 2021.09.07