

-Code
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
// 행거 위치 초기화
StringTokenizer st = new StringTokenizer(br.readLine());
ArrayList<Integer>[] hangerPos = new ArrayList[4];
for (int i = 0; i < 4; i++) {
hangerPos[i] = new ArrayList<>();
}
// 해당 행거의 위치 저장
for (int i = 0; i < cnt; i++) {
int hanger = Integer.parseInt(st.nextToken());
hangerPos[hanger].add(i);
}
// 상의와 하의 받기
st = new StringTokenizer(br.readLine());
char[] answer = new char[cnt];
int upCnt = Integer.parseInt(st.nextToken());
int downCnt = Integer.parseInt(st.nextToken());
br.close();
// 상의 걸기
for (int pos : hangerPos[1]) {
answer[pos] = 'U';
upCnt--;
}
// 하의 걸기
for (int idx : hangerPos[2]) {
answer[idx] = 'D';
downCnt--;
}
// 공용 행거에 걸기
for (int pos : hangerPos[3]) {
if (upCnt > 0) {
answer[pos] = 'U';
upCnt--;
} else if (downCnt > 0) {
answer[pos] = 'D';
downCnt--;
}
}
// 다 걸수 있는지 확인 및 출력
if (upCnt == 0 && downCnt == 0) {
StringBuilder sb = new StringBuilder();
sb.append("YES").append("\n");
for (char ch : answer) {
sb.append(ch);
}
System.out.println(sb);
} else {
System.out.println("No");
}
}
}
처음에 선택권이 없는 1과 2번 행거를 먼저 지우는 접근은 맞았으나 해당 행거를 다쓰고 3번 행거를 거는 과정에서 문제가 생겼고 이를 수정하여 해결할 수 있긴하나 2중 for문으로 시간복잡도가 좀 높아져서 각각의 갯수를 차감해보라는 힌트를 기반으로 수정하여 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 성격 유형 검사하기 (0) | 2026.03.13 |
|---|---|
| [백준/Java] 1283번 단축키 지정 (0) | 2026.03.13 |
| [프로그래머스/Java] [PCCE 기출문제] 10번 / 데이터 분석 (0) | 2026.03.13 |
| [백준/Java] 35367번 Snakey String (0) | 2026.03.12 |
| [프로그래머스/Java] 숫자 짝꿍 (0) | 2026.03.12 |