
⚠️ 주의!
SWEA에서 낸 코딩 문제에 대한 해답이 들어있습니다.
열람 시 주의해주세요.
SWEA에서 낸 코딩 문제에 대한 해답이 들어있습니다.
열람 시 주의해주세요.
[SW Expert Academy] 1208. Flatten
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
그러니까 한마디로 최대값에서 빼어서 최소값에 넣어 정렬하는 것이다. 중요한 건 최대값과 최소값은 매 루프마다 바뀔 수 있다는 것. '재정렬'하는 방법도 있지만(Array.sort 등 사용) 정렬 자체가 꽤 오랜 비용이 드는터라(처음부터 순회해야한다). 좋지는 않다. (for문을 사용한 메서드 분리 등의 방법도 있긴하다!)
max와 min의 index값을 갱신하는 방향으로 해두는 쪽이 연산이나 메모리상으로는 더 낫다(그것만 있으면 되기 때문에). 그리고 마지막으로 끝났을 때도 한 차례 정렬한 뒤에 값을 반환할 것. 하지 않으면 max값과 min값이 안 맞을 수도 있다.
참고로 2중 for문은 거의 반드시 사용해야 한다.
정답
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = 10;
for(int test_case = 1; test_case <= T; test_case++) {
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[st.countTokens()];
int answer = 0, maxValue = 0, minValue = 0;
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
//dump
for(int i = 0; i < n; i++){
int maxIndex = 0;
int minIndex = 0;
//최대 및 최소를 2중for로 구해야한다.
for(int j = 0; j < arr.length; j++) {
if(arr[j] > arr[maxIndex]) maxIndex = j;
if(arr[j] < arr[minIndex]) minIndex = j;
}
// 값이 같을 경우 이미 종료된 상황이기 때문에 break; 처리한다.
if(arr[maxIndex] == arr[minIndex]) {
break;
}
arr[maxIndex] = arr[maxIndex] - 1;
arr[minIndex] = arr[minIndex] + 1;
answer = arr[maxIndex] - arr[minIndex];
}
// dump가 끝난 뒤에 다시한번 카운팅
// 하지 않으면 max와 min이 안 맞을 수 있음.
for(int i = 0; i < arr.length; i++){
if(arr[i] > arr[maxValue]) maxValue = i;
if(arr[i] < arr[minValue]) minValue = i;
}
answer = arr[maxValue] - arr[minValue];
System.out.println("#" + test_case + " " + answer);
}
}
}
강사님의 경우는 정렬 메서드를 분리하는 방식을 사용하셨다. 내 쪽은 "정렬"보다는 그리디(Greedy)에 가까운 풀이 방식이다.
'코테런 > SWEA(알고리즘 수업)' 카테고리의 다른 글
| [코딩 테스트 RUN] SWEA 수업 : 1219. Sum (0) | 2026.03.03 |
|---|---|
| [코딩 테스트 RUN] SWEA 수업 : 1210. Ladder 1 (0) | 2026.03.03 |
| [코딩 테스트 RUN] SWEA 수업 : 1204. 최빈수 구하기 (0) | 2026.03.02 |
| [코딩 테스트 RUN] SWEA 수업 : 2063. 중간값 찾기 (0) | 2026.03.02 |
| [코딩 테스트 RUN] SWEA 수업 : 16504. GRAVITY (0) | 2026.03.02 |