본문 바로가기

전체 글51

[백준] 12904 A와 B (파이썬/python) 🎈문제 https://www.acmicpc.net/problem/12904 🎁어떤 알고리즘? 1. s를 t로 만드려면 A를 뒤에 붙이거나, 뒤집어서 B를 뒤에 붙이는 2가지 경우의 수를 t-s개수 만큼 돌려봐야한다. 하지만 t를 s로 만들 경우 훨씬 간단해진다. 2. t의 맨 뒤 알파벳에 맞춰서 제거하다보면 s와 같아지던지, t의 모든 문자열이 pop 되었음에도 s와 같지 않는 두 가지 상황이 나오게된다. 💻코드 s = list(input()) t = list(input()) same = False while t: if s == t: same = True break if t[-1] == 'A': t.pop() elif t[-1] == 'B': t.pop() t = t[::-1] if same: print.. 2023. 7. 11.
[백준] 7562 나이트의 이동 (파이썬/python) 🎈문제 https://www.acmicpc.net/problem/7562 🎁어떤 알고리즘? 1. 움직여야하는 '최소 횟수'를 알아야 하므로 당연히 BFS를 사용해야한다. 2. 상하좌우 움직임을 고려해주면 되는 일반적인 BFS와는 다르게 나이트의 움직임을 고려해줘야 한다. 3. 나머지는 다른 쉬운 bfs문제들과 다를바가 없다. 💻코드 #7562 나이트의 이동 from collections import deque # 2. bfs def bfs(x,y): board[x][y] = 0 # 초기 나이트의 위치 0으로 초기화 deq = deque() deq.append([x,y]) dx = [-2,-1,1,2,2,1,-1,-2] # 나이트의 움직임 좌표 dy = [1,2,2,1,-1,-2,-2,-1] while d.. 2023. 7. 11.
[백준] 1697 숨바꼭질 (파이썬/python) 🎈문제 https://www.acmicpc.net/problem/1697 🎁어떤 알고리즘? 1. 1차원에서의 bfs 2. 2차원 리스트에서 상하좌우의 움직임을 보여준 기존의 문제들과 달리 이 문제에서는 1차원에서 [-1,+1,*2]만큼의 x좌표 움직임을 보여준다고 이해하면 될 것 같다. 💻코드 from collections import deque def bfs(x): deq = deque() deq.append(x) while deq: x = deq.popleft() if x == k: print(graph[x]) break for i in [x-1,x+1,x*2]: nx = i if nx (100001)-1: continue if graph[nx] == 0: graph[nx] = .. 2023. 6. 20.
[백준] 2798 블랙잭 (파이썬/python) 🎈문제 https://www.acmicpc.net/problem/2798 🎁어떤 알고리즘? 1. M을 넘지 않으면서 M에 최대한 가까운 카드를 3장의 합을 알려면 모든 경우의 수를 다 따져봐야한다. 2. 모든 경우의 수를 다 따져보는 알고리즘 기법을 부르트포스 알고리즘이라고 하는데, 거창한거 없이 그냥 파이썬 내장 라이브러리를 사용하면 된다. 3. 이 문제의 경우, 3장의 "합"을 구하므로 카드의 순서는 신경쓰지 않아도 된다. 4. 따라서 conbination(조합)으로 카드 3장을 구하면 된다. 💻코드 from itertools import combinations N,M = map(int,input().split()) card = list(map(int,input().split())) temp = 0 .. 2023. 6. 19.