목록알고리즘 (82)
내가 하고싶은 건 다 하는 공간

💡문제 링크https://www.acmicpc.net/problem/1920 💡문제 분석 요약N개의 정수가 주어졌을 때(A), 특정 정수가 A 안에 있는지 판단하는 문제특정 정수가 A 안에 존재하면 1을, 존재하지 않으면 0을 출력한다.예를 들어, A = [1, 2, 4, 8, 9, 10]일 때, 9는 A 안에 있으므로 1을 출력, 7은 A 안에 없으므로 1을 출력 💡알고리즘 설계처음에 단순히 앞에서부터 차례대로 순서 탐색하는 일차원적인 생각을 했다."당연히" 런타임 에러가 떴다. ( 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다. )그래서 '아 그냥 무작정 탐색은 안되겠구나. 이진 탐색을 해야겠다' 라고 생각했다.이진 탐색은 여러 번 공부해서 개념이 머리에 잡혀있던 터라 그냥 코드..
앞으로 문제를 어떻게 풀어야할지, 순서를 시스템화하기 위한 기록1. 가장 작은 문제로 쪼개본다2. 의사 코드를 써서 내 아이디어를 확립한다.3. 인풋값을 잘 받아들이는지 확인한 후, 연습할 때 사용할 테스트 케이스를 미리 만들고 코드 짜기 시작한다.4. 중간중간 print 함수를 통해 내가 구상한대로 코드가 잘 작동되고 있는지 확인한다.

💡문제 링크https://www.acmicpc.net/problem/2630💡문제 분석 요약여러 개의 정사각형 칸으로 이루어진 정사각형 모양의 종이가 있다.각 정사각형은 파란색(1) 혹은 흰색(0)아래의 규칙에 따라 종이를 자른다.1. 모두 같은 색으로 칠해져 있지 않으면 4등분으로 자르기2. 모두 같은 색으로 칠해져있거나 하나의 정사각형 칸으로 이루어져 있어서 더 이상 4등분 할 수 없을 때까지 1을 반복최종적으로 나누어진 하얀색 색종이의 개수, 파란색 색종이의 개수를 출력한다. 💡알고리즘 설계작은 문제를 통해 큰 문제를 해결하는 분할 정복 알고리즘을 사용하였다.분할 정복 알고리즘은 1)분해 - 2)정복 - 3) 결합 이 세 과정으로 구성된다.1) 분해: 문제를 4개로 나눈다.2) 정복: 나눠진..

💡문제 링크https://www.acmicpc.net/problem/1932 💡문제 분석 요약한 층에 하나의 숫자를 선택선택한 모든 숫자의 합이 최대가 되는 그 최댓값을 출력 💡알고리즘 설계1. n(층수) 입력받기2. 테이블화를 하기 위해 (n+1)*(n+1) 크기의 테이블 만들기 3. 각 층의 숫자들을 테이블에 넣기4. 아랫층의 숫자 중 가장 큰 수를 본인과 합한 수를 본인에게 넣기알고리즘 흐름이 잘 이해가 안 될 때에는 직접 손으로 그려보기!💡코드n = int(input())# 테이블화table = [[0] * (n+1) for _ in range(n+1)]# 테이블 채워넣기for i in range(1, n+1): table[i][1:i+1] = list(map(int, input().sp..

💡문제 링크https://www.acmicpc.net/problem/24416 💡문제 분석 요약피보나치 수열을 재귀함수로 푸는 의사 코드, 동적 계획법으로 푸는 의사 코드가 주어졌다.이를 실제 파이썬 코드로 바꾸고, 연산횟수를 출력하여라. 💡알고리즘 설계1. 재귀함수 코드 짜기2. DP 코드 짜기3. 함수 안에 변수를 넣을 때 global 함수 써주기 ⭐ ⭐ ⭐ 💡코드n = int(input())count_recur, count_dp = 0, 0f = [0] * (n+1)def fib_recur(n): global count_recur if (n==1 or n==2): count_recur += 1 return 1 else: return fib_recur(n-1) + fib..
💡문제 링크https://www.acmicpc.net/problem/25305 💡문제 분석 요약n명의 학생들 중 k명의 학생만 상을 받는다.커트라인을 구하여라. 💡알고리즘 설계1. n명의 학생들의 점수를 scores 리스트에 담기2. 리스트를 내림차순으로 정렬하기(reverse = True)3. 리스트 속 k-1번째 요소 출력하💡코드n, k = map(int, input().split())scores = list(map(int, input().split()))scores.sort(reverse = True)cutline = scores[k-1]print(cutline) 💡 오답 풀이... 💡 다른 풀이print(sorted(scores)[-k])오름차순으로 정렬한 다음에 뒤에서 k번째 요소를 ..