본문 바로가기

Algorithm/Greedy

(40)
(C++) - 백준(BOJ) 16208 : 귀찮음 https://www.acmicpc.net/problem/16208 16208번: 귀찮음 현우는 무슨 이유에선지 길이 a1, ..., an의, 총 n개의 쇠막대가 필요해졌다. 하지만 그가 가진 것은 길이 a1+...+an의 하나의 쇠막대뿐이었다. 현우는 이 막대를 직접 잘라서 원래 필요하던 n개의 쇠 www.acmicpc.net 간단한 greedy 문제였습니다. 📕 풀이방법 📔 입력 및 초기화 수의 개수 n, 필요한 막대의 길이를 저장할 length, 정답을 출력할 ans, 필요 막대들의 정보를 입력받을 vector v를 선언 후 입력받습니다. 📔 풀이과정 n개의 막대들의 총 길이를 length에 저장합니다. 어떤 방법을 사용해도 결국에는 length길이의 막대를 n-1번 잘라야 합니다. 결국에는 x*y..
(C++) - 백준(BOJ) 13416 : 주식투자 https://www.acmicpc.net/problem/13416 13416번: 주식 투자 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫째 줄에는 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각각의 테스트 케이스의 첫째 줄에 www.acmicpc.net greedy문제였습니다. 📕 풀이방법 📔 입력 및 초기화 test case 수 t, 주식 일 수 n, 정답을 출력할 변수 ans를 선언한 후 적절히 입력받습니다. 📔 풀이과정 1. n만큼 for loop를 수행하며 A,B,C사의 이익과 손해 data를 변수 a,b,c를 선언해 입력해줍니다.2. 지역변수 profit을 선언해 a,b,c중 최댓값을 저장해줍니다.3. profit이 음수라면 무조건 손해이기..
(C++) - 백준(BOJ) 16435 : 스네이크버드 https://www.acmicpc.net/problem/16435 16435번: 스네이크버드 첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다. 두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다. www.acmicpc.net greedy로 푼 문제였습니다. 📕 풀이방법 📔 입력 및 초기화 처음 스네이크버드의 길이 snakeBirdLength, 과일 개수 n, n개의 과일 높이 정보를 저장할 vector fruitHeight를 선언 한 후 적절히 입력받습니다. 📔 풀이과정 새가 제일 길어지려면 과일을 최대한 많이 먹어야 합니다. 이를 위해 과일 높이를 오름차순으로 정렬..
(C++) - 백준(BOJ) 9237 : 이장님 초대 https://www.acmicpc.net/problem/9237 9237번: 이장님 초대 입력은 두 줄로 이루어져 있다. 첫째 줄에는 묘목의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄에는 각 나무가 다 자라는데 며칠이 걸리는지를 나타낸 ti가 주어진다. (1 ≤ ti ≤ 1,000,000) www.acmicpc.net greedy문제였습니다. 📕 풀이방법 📔 입력 및 초기화 묘목의 수 n, 이장님 만나는 날 meetDay, 묘목 자라는데 걸리는 시간을 저장할 vector형 변수 growDay를 선언 후 적절히 입력해줍니다. 📔 풀이과정 자라는데 오래걸리는 묘목은 최대한 빨리 심어야 합니다. 따라서 growDay를 내림차순으로 정렬해줍니다.1. growDay에 대해 for loop를 수..
(C++) - 백준(BOJ) 1388 : 바닥 장식 https://www.acmicpc.net/problem/1388 1388번: 바닥 장식 형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나 www.acmicpc.net greedy로 푼 문제였습니다. 📕 풀이방법 📔 입력 및 초기화 n행 m열을 선언 후 입력한 다음 이차원 배열 room에 n행 m열만큼 구조를 입력해줍니다. 체크 배열 ck도 선언해줍니다. 📔 풀이과정 0행 0열부터 시작해 체크가 안되어있으면 다음을 수행합니다. 1. 체크가 안된 위치가 i행 j열인 경우 ans++ 후 그 값을 변수 shape에 저장합니다. 2. shape이 '-'라면 '|'가 나오기 전..
(C++) - leetcode 2007번 : Find Original Array From Doubled Array https://leetcode.com/contest/biweekly-contest-61/problems/find-original-array-from-doubled-array/ Account Login - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com greedy? 문제였습니다. 📕 풀이방법 📔 입력 및 초기화 나온 수를 세줄 일차원 배열 countNum, 수가 사용되었는지의 여부를 저장할 isUsed 배열, 정답을 반환할 vector ans를 선언합니다. 1. ..
(C++) - 백준(BOJ) 17521번 : Byte Coin https://www.acmicpc.net/problem/17521 17521번: Byte Coin 입력은 표준입력을 사용한다. 첫 번째 줄에 요일 수를 나타내는 양의 정수 n과 초기 현금 W(1 ≤ n ≤ 15, 1 ≤ W ≤ 100,000)가 주어진다. 다음 n 개의 줄에서, i번째 줄은 i일의 바이트 코인 가격을 나 www.acmicpc.net greedy문제였습니다. 📕 풀이방법 📔 입력 및 초기화 n, w, coinNum, 일차원 배열 coinPrice를 long long형으로 선언합니다. 📔 풀이과정 coinPrice[i] < coinPrice[i + 1] 이라면 i번째 날에서 매수, i+1번째 날에 매도하는 것이 무조건 이익을 취할 수 있는 방법입니다. i번째 산 코인의 개수를 coinNum..
(C++) - 백준(BOJ) 14916번 : 거스름돈 https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net greedy 문제였습니다 📕 풀이방법 📔 입력 및 초기화 변수 n을 선언 후 입력받습니다. 📔 풀이과정 1. 만들 수 없는 경우는 1과 3뿐입니다. 그 이상부터는 짝수는 2로, 5가 포함된다면 홀수도 나타낼 수 있기 때문에 표현가능합니다. 따라서 이 경우에는 -1을 출력합니다. 2. 나머지는 최소로 나타내기 위해 최대한 5를 사용하면 되므로 n을 5로 나눈 나머지가 짝수인지 홀수인지 여부에 따라 답이 나뉩니다. 2-1. 짝수인 경우 5로 나눠준 몫 + 5로 나눈 나머지를 2로 나눈 몫이 답이 됩니다. 2-2. 홀수인..