백준/그리디13 백준 2109 c++ "순회강연" -PlusUltraCode- https://www.acmicpc.net/problem/2109 [필자 사고]money 와 day가 주어졌다. 이 문제를 보고 예전에 풀어본 비슷한 문제가 떠올랐다.가자 비싼 값어치를 우선 정렬뒤 같은 값일 경우 day가 큰걸로 정렬했다.그후 첫번째 idx를 꺼내 nowDay 부터 day ==1 까지 비어있는 것중 가장 큰 day 에다가 값을 넣었다. 처음 보면 한번에 풀기는 쉽지 않은 알고리즘이지만 한번만 제대로 이해한다면 수월하게 문제를 풀 수 있다.[코드 해설]1. 입력 처리 (Input 함수)Input() 함수는 강연 정보를 입력받고, 문제 해결을 위한 준비 작업을 수행하는 함수이다.먼저 사용자로부터 강연 요청의 개수 N을 입력받는다. 이후 N개의 줄에 걸쳐 각 강연에 대한 정보, 즉 강연료(.. 2025. 5. 9. 백준 30805 c++ "사전 순 최대 공통 부분 수열" -PlusUltraCode- https://www.acmicpc.net/problem/30805 [필자 사고]일단 사전순에서 가장 느리게 되려면 앞 부분에 가장 큰수가 와야 된다.이러한 사고과정의 형태로 정렬을 이용할 수 있ㄷ. 두번째 문제 해당 부분은 수열이다. 공통 부분 수열은 인덱스 순서를 중요시 한다.그래서 같은 숫자일 경우 인덱스가 작은거 먼저 와야 더 늦은 사전 순을 만들 수 있다. 만든 배열을 잘 정렬한 뒤 이제 i,j를 이용하여 각 idx의 값들을 비교해야 한다.같은 경우 resultArr에 값을 넣고 lastIdx 도 갱신해준다. 나머지 부분은 첫번째 배열 수보다 두번째 배열 수가 크거나 작다면 갱신해주고 또한 lastIdx보다 작은 인덱스라면 \검사할 필요없이 바로 인덱스를 증가시키는 형태로 해당 문제를 풀었다... 2025. 5. 9. 백준 1083 c++ "소트" -PlusUltraCode- https://www.acmicpc.net/problem/1083 [필자 사고]그리디 알고리즘이다. 필자는 처음 이 문제를 푸는 방식은 바로 옆에 붙어있는 수들만 신경을 썼었다.그러나 문제를 풀다가 생각해보니 옆에 있는 수만 생각할게 아니라 4번째 수가 첫번째로 올 수도 있구나 같은 생각이 들어 알고리즘을 수정했다. 아직 처음 접하면 바로 푸는 과정을 떠올리기는 쉽지가 않은 문제였다. 아래는 자세한 코드 해설이다.[코드 해설]2. Input 함수사용자로부터 숫자의 개수 N을 입력받고, 그다음 N개의 숫자를 입력받아 arr에 저장합니다. 마지막으로 바꿀 수 있는 총 횟수 S를 입력받습니다.3. Swap 함수배열의 두 인덱스를 받아 해당 위치의 값을 서로 바꿉니다. 간단한 교환 함수입니다.4. Game_S.. 2025. 5. 8. 백준 13904 c++ "과제" -PlusUltraCode- https://www.acmicpc.net/problem/13904 [필자 사고]보통 과제일이 촉박하면 작은 값을 우선순위로 해서 정렬을 한다. 다만 이 문제는 함정이 있다. 해당 형태로 정렬을 하게 되면 이 문제를 풀지 못하게 된다.과제 가치와 과제일이 많은것을 우선순위로 정렬을 한 뒤 과제일을 기준으로 vistied배열을 선언한여 적당한 날짜에 갱신하는 형태로 해당 문제를 해결해야 된다. 당연히 작은 숫자가 먼저 우선순위 와야 문제를 해결할 수 있다는 사고에서 벗어나게 해준 문제라고 생각한다.아래는 자세한 코드 해설이다.[코드 해설] Input 함수사용자로부터 과제 수 N을 입력받고,N개의 (마감일, 점수) 데이터를 우선순위 큐에 넣습니다.우선순위 큐는 점수가 높은 순으로 과제를 정렬합니다.Game.. 2025. 5. 1. 이전 1 2 3 4 다음