알고리즘 108

[Python][백준] 2805. 나무 자르기/ 이진탐색 (S2)

🔗링크 :  https://www.acmicpc.net/problem/2805 🗒️파이썬 코드 풀이N,M = map(int,input().split())lst = list(map(int,input().split()))start, end = 1, max(lst)cnt = 0 while start mid : cnt += (ls-mid) if cnt >= M : start = mid + 1 elif cnt  1. 이진탐색으로 문제를 해결하면 된다.  2. 이진탐색에서 start point와 end point를 만들어준다. 3. start와 end의 중간 값을 mid 값으로 주고,  전체 리스트 반복문으로 mid 보다 큰 값을 필터링하여 더해준다. (..

[Python][백준] 1914. 하노이 탑 / 재귀함수 (G5)

🔗링크 :  https://www.acmicpc.net/problem/1914🗒️파이썬 코드 풀이N = int(input())if N  1. 우선 첫번째로hanoi(n-1,from_pos,aux_pos,to_pos)해당 재귀함수를 통해 덩어리를 타고 타고 aux(보조)로 이동한다.   2. 두번째로print(from_pos,to_pos)  n = 1 인 경우와, 그 외 경우를 목적지로 보낸다.   3. 세번째로hanoi(n-1,aux_pos,to_pos,from_pos)그럼 다시 재귀함수를 타고 타고 aux를 기점(from)으로  바꿔준다.     📌  문제 코멘트재귀함수를 통해 타고타고 이동하고, print로 마무리 이동을 해준다...  대표적인 재귀함수 문제로 코드는 간단한데 이해가 너무 어렵..

[Python][백준] 1932. 정수 삼각형/ DP (S2)

🔗링크 :   https://www.acmicpc.net/problem/1932🗒️파이썬 코드 풀이n=int(input())d=[]for i in range(n): d.append(list(map(int, input().split())))for i in range(1,n): for j in range(len(d[i])): if j==0: d[i][j]=d[i][j]+d[i-1][j] elif j==len(d[i])-1: d[i][j]=d[i][j]+d[i-1][j-1] else: d[i][j]=max(d[i-1][j-1],d[i-1][j])+d[i][j]print(max(d[n-1])) 1. 전형적인 DP 문제이다.  2. 반복문은 크게 2가지가 필요하..

[Python][백준] 1193. 분수찾기 / 구현 (S5)

🔗링크 :   https://www.acmicpc.net/problem/1193🗒️파이썬 코드 풀이N = int(input())count,line = 0,0while N > count + line : count = count + line line += 1if line%2 == 0: print(f"{N-count}/{line-(N-count)+1}")else: print(f"{line-(N-count)+1}/{(N-count)}") 1.  ↗  뱡향의 합이 일치하는 점을 염두한다.  2. 먼저 입력 받은 N의 줄(line)과 이전 줄의 끝 번호(count)를 알아낸다. 3. 각 줄이 짝수 or 홀수일 경우를 나눠서 출력해주면 된다. 단순히 (1) N(전체값) - 이전 줄의 끝 번호..

[Python][백준] 1149. 소수&팰린드롬 / 브루트포스, 에라토스테네스의 체 (S1)

🔗링크 :   https://www.acmicpc.net/problem/1747🗒️파이썬 코드 풀이N = int(input())lst = [0] * 2000000lst[0],lst[1] = 1,1count = 2 while count  1. 문제 내용은 깔끔하다. - 최소한의 시간 복잡도로 소수를 만들 수 있는지?- 팰린드롬을 구현 할 수 있는지 ? 2. 먼저 소수 리스트부터 만들어보자. 1. 넉넉하게 2,000,000 크기의 리스트를 만들어 준다.2. 예외 값인 0과 1의 값은 미리 채워준다.  (꼭 채워줘야함)3. count를 1씩 증가 시키며,  lst에서 count만큼의 인덱스 값이 0이면 해당 배수 1로 처리(count 값이 커질 수록 연산 기하급수적으로 감소) 3. 다음으로 팰린드롬은 간단..

[Python][백준] 1259. 팰린드롬수 / 구현,문자열 (B1)

🔗링크 :   https://www.acmicpc.net/problem/1259🗒️파이썬 코드 풀이while True: num = input() if num == "0": break if num == num[::-1]: print("yes") else: print("no") 1. 간단하게 [: : -1] 인덱싱으로 뒤집어 주면 된다.  2.펠린드롬이니까 꺼꾸로 한 값이랑 같으면 "yes" 그 외는 "no"를 출력하면 된다.  📌  문제 코멘트별로 어려운 문제는 아니다. 근데 가끔 [: : -1 ] 거꾸로 인덱싱 하는 방법을 까먹어서 포스팅 해봤다.  📚문제어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'ra..

[Python][백준] 1987. 알파벳 / 백트래킹,DFS (G4)

🔗링크 :   https://www.acmicpc.net/problem/1987🗒️파이썬 코드 풀이R,C = map(int,input().split())lst = []for i in range(R): tmp = list(input()) lst.append(tmp)di,dj = [0,1,0,-1],[1,0,-1,0]alphabet = [0] * 26alphabet[ord(lst[0][0])-65] = 1mx = 0def dfs(i,j,count): global mx mx = max(mx,count) for k in range(4): ni,nj = i+di[k],j+dj[k] if 0 1. BFS를 먼저 생각해보았지만, 알파벳 체크 부분이 안돼서 DFS..

[Python][백준] 2661. 좋은수열 / 백트래킹 (G4)

🔗링크 :   https://www.acmicpc.net/problem/2661🗒️파이썬 코드 풀이N = int(input())def check(lst): for i in range(1,len(lst)//2+1): # 몇 개씩 확인 할 것인지 for j in range(len(lst)-i): if lst[j:j+i] == lst[j+i:j+i+i]: return False return True mn = 1e100def dfs(n,lst): # return -1로 상위 호출에서 다른 경로 탐색 제어 if not(check(lst)): return -1 global mn if ..