백준 51

99클럽 코테 스터디 31일차 TIL + DP

https://www.acmicpc.net/problem/2631import sysinput = sys.stdin.readlinen = int(input())lines = []for _ in range(n): lines.append(int(input()))dp = [1] * nfor i in range(n): for j in range(i): if lines[j] 결국 오름차순으로 정렬되기까지의 최소 이동 횟수를 정해야한다.가장 큰 증가하는 부분 수열을 구하면 그 사람은 올바르게 줄 서있는 것이기 때문에 그 나머지 값을 구하면 된다.

Algorithm/Problems 2024.11.28

99클럽 코테 스터디 30일차 TIL + DP

https://www.acmicpc.net/problem/1965import sysinput = sys.stdin.readlinen = int(input())box = list(map(int, input().split()))dp = [1] * nfor i in range(n): for j in range(i): if box[j] 가장 긴 감소하는 부분 수열, 가장 큰 증가하는 부분 수열과 비슷한 계열이다.처음 코드를 짰을 때, dp[i] = max(dp[i]+1, dp[j]) 로 적어 오답이었다.현재 자기자신과 이전 값에 자기자신이 포함되는 +1 이 되는 값 중 더 큰 값을 초기화 시키며 가장 큰 값을 구하면 된다.

Algorithm/Problems 2024.11.27

99클럽 코테 스터디 28일차 TIL + DP

https://www.acmicpc.net/problem/11055import sysinput = sys.stdin.readlinen = int(input())A = list(map(int, input().split()))dp = [0] * ndp[0] = A[0]for i in range(n): for j in range(i): if A[i] > A[j]: dp[i] = max(dp[i], dp[j]+A[i]) else: dp[i] = max(dp[i], A[i])print(max(dp))dp리스트를 0으로 초기화 한 후 dp[0]값은 이전 값과 비교할 것이 없기 때문에 A[0]으로 초기화 해준다.자신 앞까지의 값을 비교하며 이전까지..

Algorithm/Problems 2024.11.25

99클럽 코테 스터디 27일차 TIL + DP

https://www.acmicpc.net/problem/11722import sysinput = sys.stdin.readlinen = int(input())A = list(map(int, input().split()))dp = [1 for _ in range(n)]for i in range(n): for j in range(i): if A[i] 자신의 앞까지 값을 비교하며 앖에서 비교했던 값중 가장 큰값 과 현재 자신의 값 + 1 중 더 큰 값을 초기화한다.이전까지 구했던 값은 다시 구하지 않고 dp 리스트를 이용해 값 비교를 해준다.

Algorithm/Problems 2024.11.24

99클럽 코테 스터디 26일차 TIL + 수학

https://www.acmicpc.net/problem/9655import sysinput = sys.stdin.readlinen = int(input())if n % 2 == 0: print("CY")else: print("SK")상근이가 먼저 게임을 시작하고 돌을 1개 혹은 3개를 가져오며 마지막 돌을 가져가면 이기는 게임이다.n = 1 일 때부터 생각하면n = 1 상근 WINn = 2 창영 WINn = 3 상근 WINn = 4 창영 WIN....n이 홀수 일 때 상근이가 이기고 n이 짝수 일 때 이기는 것을 알 수 있다.

Algorithm/Problems 2024.11.23

99클럽 코테 스터디 19일차 TIL + 그리디

https://www.acmicpc.net/problem/1374import sysimport heapqinput = sys.stdin.readlinen = int(input())ls = []for _ in range(n): c,s,e = map(int, input().split()) ls.append([c,s,e])ls.sort(key=lambda x : (x[1])) # 시작시간 정렬room = []heapq.heappush(room, ls[0][2]) # 가장 처음 시작하는 강의의 끝나는시간for i in range(1,n): if ls[i][1] 그 강의실 이용 heapq.heappop(room) # 가장 빨리 끝나는 강의실 out > 그 강의실 이용 h..

Algorithm/Problems 2024.11.16