본문 바로가기

프로그래밍/알고리즘126

냅색(Knapsack)알고리즘(배낭 문제) 1. 분할 가능한 배낭 문제 도둑이 열린 상자에 든 금괴를 훔쳐가려고 한다 도둑이 가지고 있는 배낭에 담을 수 있는 총무게가 15kg이고 금괴가 든 상자는 a상자가 12kg, b상자가 1kg, c상자가 4kg, d상자가 1kg, e상자가 2kg이 있다 a, b, c, d 상자의 가치가 각각 $4, $2, $1, $10, $2라고 할 때 도둑이 배낭에 담을 수 있는 최적의 조합은 a 7kg, c 4kg, b 1kg, e 2kg, d 1kg이 된다 - 그리디로 해결 def knapsack1(W, w, p): n = len(w) - 1 # 아이템 개수 K = [0] * (n + 1) # 최대 가치를 저장할 배열 weight = 0 # 현재 무게 for i in range(1, n + 1): weight += .. 2023. 6. 14.
백준 14225 - 부분수열의 합 문제 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 접근 - 입력된 수열을 정렬한 후에 순서대로 처리 - 변수 a는 현재까지의 부분합 - 반복문을 통해 수열을 순회하면서 a에 현재 수를 더하기 - 만약, 현재까지의 부분합에 1을 더한 값보다 현재 수가 크면 반복문을 중단 - 이때, 중단되는 시점에서의 a값은 부분합 중 가장 작은 자연수 - a + 1을 출력하여 문제의 답 출력 코드 # 입력 받기 input() a = 0 # 부분합을 저장할 변.. 2023. 6. 13.
백준 15736 - 청기 백기 파이썬 문제 15736번: 청기 백기 예제 입력 1의 경우 1, 2, 3번 깃발이 존재하고, 3명의 선수가 참가한다. 첫 번째 선수는 1의 배수의 번호를 가진 깃발을 뒤집는다. 초기에 청색이였던 깃발은 첫 번째 선수에 의해 모두 백기로 된 www.acmicpc.net 풀이 i의 배수일 때, i의 이전값들은 변하지 않는다 또, '백'사이에 '청'이 오는 것은 i의 제곱수와 일치한다 그래서 i의 제곱근 값을 구한다 코드 n = int(input()) print(int(n**0.5)) 2023. 6. 8.
백준 1145 - 적어도 대부분의 배수 파이썬 문제 1145번: 적어도 대부분의 배수 첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다. www.acmicpc.net 풀이 코드1(완전탐색) a, b, c, d, e = map(int, input().split()) # 범위는 적당히 큰 수까지 함 for num in range(1, 100000000): count = 0 if num % a == 0: # num이 a로 나누어지는지 확인 count += 1 if num % b == 0: # num이 b로 나누어지는지 확인 count += 1 if num % c == 0: # num이 c로 나누어지는지 확인 count += 1 if num % d == 0: # num이 d로 나누어지는지 확인 count += 1.. 2023. 6. 5.
프로그래머스 - 표편집 파이썬 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제설명(내용 이해 어렵지 않음 구현하기가 어려울 뿐) 한 줄 정리: 명령어 기반 표의 행을 선택, 삭제, 복구하는 프로그램 작성 후, 삭제되지 않은 행 '0', 삭제된 것 'x'로 표시, return n = 처음 표의 행 개수 k = 처음 선택된 행의 위치 cmd = 수행한 명령어들이 담긴 문자열 배열 파란색은 현재 선택된 행을 의미한다(한 번에 한 행만 선택 가능) 명령어 정리 'U X' 현재 선택된 행에서 x칸 위에 있는 행 선택 'D X' 현재 선택된 행에서 x칸 아래에 있는 행 선택 'C' 현재.. 2023. 6. 1.
프로그래머스 - 홀수 vs 짝수 파이썬 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 실패한 코드 def solution(num_list): even = 0 odd = 0 for i in range(len(num_list)): if num_list[i] % 2 != 0: odd += int(num_list[i]) else: even += int(num_list[i]) return max(even, odd) 쉬운 문제인데 왜 틀렸나 계속 코드를 뚫어져라 봤다가 답을 찾았다 문제에서 원소의 값이 홀수, 짝수인지 묻는 것이 아니라 원소의 인덱스의 짝수, 홀수를 묻는 건데 이 부분을 간과했다 /.. 2023. 5. 26.
프로그래머스 - 파괴되지 않은 건물 파이썬 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 n*m 크기의 행렬모양의 게임 맵이 있음 각 칸에 적혀있는 숫자는 건물의 내구도를 뜻함 적들은 건물을 공격, 공격받으면 내구도가 감소하고 내구도가 0 이하면 파괴됨 아군은 회복스킬을 통해 내구도를 높이려고 함 왼쪽 사진의 상황은 크기가 4*5인 맵에 내구도가 5인 건물들이 있는 상황 오른쪽의 사진은 적이 맵의 (0,0)부터 (3,4)까지 공격하여(= 전체를 공격) 4만큼의 건물의 내구도를 낮춘 상황 왼쪽 사진의 상황은 적이 맵의 (2, 0)부터 (2,3)까지 공격하여 2만큼의 건물 내구도를 낮.. 2023. 5. 25.
프로그래머스 - 카운트 다운 파이썬 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 정리 용어 정리 - 카운트 다운 = 무작위로 정해진 점수를 다트로 깎아서 0점을 만드는 게임 - 점수 설명 싱글 - 해당 수 만큼 점수 얻음(1,2,3....20까지의 점수) 더블 - 해당 수 두 배 만큼 점수 얻음(2,4,6...40까지의 점수) 트리플 - 해당 수 세 배 만큼 점수 얻음(3,6,9....60까지의 점수) 불, 아우터 불 - 50점 얻음 경기 정리 - 한줄 정리: 빨리 0점 만들기, 같으면 '싱글', '불' 최대한 많이 던지기 - 한 게임에는 두 선수 참가 - 교대로 한 번씩 던지.. 2023. 5. 17.
프로그래머스 - 억억단을 외우자 파이썬 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 정리 한 줄 정리 starts의 변수에서 e파라미터까지 범위 숫자의 약수의 개수 중 가장 많은 약수를 가진 숫자를 차례로 반환하는 문제 포인트 - 억억단에서 해당 자연수가 등장하는 횟수 = 악수의 개수와 동일 예를 들어 8이 억억단에 등장하는 횟수는 1*8 2*4 4*2 8*1이다 이는 8의 약수의 개수인 4(1, 2,4,8)와 동일하다 - 시간초과 안 걸리기 = 약수의 개수를 한꺼번에 구하기, 여러 번 돌면 안 됨 문제 풀이 순서 - 시작은 랜덤이지만 끝지점은 e파라미터로 정해져있음 -> 그래서 .. 2023. 5. 15.