본문 바로가기

전체 글347

백준 13975 c++ "파일 합치기 3" -PlusUltraCode- https://www.acmicpc.net/problem/13975 [필자 사고]greedy 알고리즘 이용하여 풀면 쉽게 풀 수 있다. 필자는 해당 문제를 우선순위 큐를 이용하여 첫번째 수와 두번째 수를 꺼내서 합한뒤 resultSum에 더해주는 형태로해당 문제를 해결했따. 아래는 자세한 코드 해설이다.[코드 해설] 문제 배경 (직관적인 예시)N개의 숫자 묶음이 있고, 한 번 두 개를 합칠 때마다 그 합만큼의 비용이 든다고 가정합니다.이 과정을 반복해서 하나로 합쳐야 할 때, 전체 합산 비용의 최소값을 구하는 것이 목표입니다.가장 작은 숫자 두 개씩 합쳐나가는 것이 항상 최적의 선택입니다. → 그래서 min-heap (우선순위 큐) 사용🔧 함수 설명1. main()테스트 케이스 개수 T를 입력받고, 각.. 2025. 4. 30.
백준 2138 c++ "전구와 스위치" -PlusUltraCode- https://www.acmicpc.net/problem/2138 [필자 사고]이 문제를 dp 혹은 greedy둘 중 많은 고민을 했따. 반복적인 과정이 없으므로 greedy라 판별했지만 어떻게 해당 문제를 접근해야 될지 아이디어가 떠오르지 않았다.그래서 일단 무작정 for문으로 하나하나 해보기로 했다. 그런데 왠걸 됐다. greedy는 매번 최적의 해를 찾아 떠나는 것이다. 해당 풀이법이 맞았다.그러나 첫번째 경우의 수에 따라 해당 경우의 수가 달라지므로 그 부분만 주의해주면 된다. 아래는 자세한 코드 해설이다.[코드 해설]함수별 설명:1. Input()사용자로부터 입력을 받습니다.N: 전구의 개수str1: 초기 전구 상태str2: 목표 전구 상태2. lightOn(int idx)idx번째 스위치를 .. 2025. 4. 30.
백준 1339 c++ "단어 수학" -PlusUltraCode- https://www.acmicpc.net/problem/1339 [필자 사고]처음 이 문제를 접할 때는 최상위 자릿수에서 최대의 값만 넣으면 될 줄 알았따. 그러나 실제로 모든 자릿수를 검증해야 된다. 중복되는 문자열이 있기 때문에그래서 필자는 pow를 이용하여 실제로 문자열마다 자릿수의 값이 얼마인지 계산 후 가장 큰 값인 idx부터 9 8 7 6 등을 곱해 문제를 해결했다. 아래는 자세한 코드 해설이다.[코드 해설]구조 설명입력 받기 (Input)N개의 단어를 입력받습니다.arr라는 길이 26짜리 벡터를 만듭니다. (각각 알파벳 A~Z에 해당)arr[0] → 'A'arr[1] → 'B'…arr[25] → 'Z'각 단어를 입력받아 오른쪽 끝(1의 자리)부터 거꾸로 보면서,해당 알파벳에 자리수 값(.. 2025. 4. 29.
백준 1461 c++ "도서관" -PlusUltraCode- https://www.acmicpc.net/problem/1461 [필자 사고]그리디 문제이다.필자는 우선순위큐를 이용하여 M개 만큼 빼는 형태로 해당 문제를 해결했다.음수와 양수를 따로 처리를 해줬고 절대값이 가장 큰 값은 복귀를 하지 않아도 되므로해당 부분은 따로 찾은 뒤 pop을 해결했다. 아래는 자세한 코드 해설이다.[코드 해설]구조 설명입력 받기 (Input)N개의 수를 입력받습니다.수를 절댓값과 부호(1: 양수, 0: 음수)로 저장해둡니다 (arr 벡터).양수는 plus_Queue에, 음수는 minus_Queue에 각각 저장합니다.plus_Queue는 큰 수가 우선 나오게 (오름차순)minus_Queue는 작은 수가 우선 나오게 (내림차순) 정렬합니다.전체 입력 중 가장 절댓값이 큰 수가 양.. 2025. 4. 29.