📖 문제
9081번: 단어 맞추기
입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알
www.acmicpc.net
💡 풀이 방식
• 구현
1. 단어 맨 뒤에서부터 확인하며 처음으로 감소하는 부분의 인덱스를 찾는다. (idx1)
2. 다시 맨 뒤에서부터 확인하며 감소하는 부분보다 큰 부분의 인덱스를 찾는다. (idx2)
3. idx1과 idx2에 있는 두 값을 swap한다.
4. 단어의 idx1 위치부터 끝까지 단어를 오름차순 정렬한다.
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import java.util.*;
import java.io.*;
public class Main {
static int T;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
while(T --> 0) {
findNextWord(br.readLine());
}
System.out.println(sb.toString());
}
private static void findNextWord(String str) {
int len = str.length();
char[] ch = str.toCharArray();
int idx1 = -1; // 처음으로 감소하는 원소 위치
int idx2 = 0; // 1에서 찾은 원소보다 처음으로 큰 원소 위치
// 1) 맨 뒤에서부터 확인하며 처음으로 감소하는 부분 찾기
for(int i = len - 1 ; i > 0 ; i--) {
if(ch[i - 1] < ch[i]) {
idx1 = i - 1;
break;
}
}
if(idx1 == -1) {
sb.append(str).append("\n");
return;
}
// 2) 다시 맨 뒤에서부터 확인하며 감소하는 부분보다 큰 부분 찾기
for(int i = len - 1 ; i >= 0 ; i--) {
if(ch[idx1] < ch[i]) {
idx2 = i;
break;
}
}
// 3) idx1과 idx2에 있는 두 원소 swap하기
char tmp = ch[idx1];
ch[idx1] = ch[idx2];
ch[idx2] = tmp;
Arrays.sort(ch, idx1 + 1, len); // 4) idx1의 위치 뒷 부분 오름차순 정렬
for(char c : ch)
sb.append(c);
sb.append("\n");
}
}
|
cs |
➕ 다른 풀이 방식
그리디...
백준 9081 자바 - 단어 맞추기 (BOJ 9081 JAVA)
문제 : boj9081 이하 설명은 이해의 편의를 위해 숫자로 설명해보겠다. 실제로 이 문제를 풀때도 문자를 아스키코드를 기준으로 변경해서('A'~'Z'까지 나오므로 각각을 숫자 0~25로 대입) 풀어야 한다
nahwasa.com
💦 어려웠던 점
- 조합으로 모든 단어 다 구하고 정렬하고 나서 다음에 있는 값 구하는 식으로 풀었었는데 단어 길이가 아무래도 99까지 되다보니 당연히 시간 초과가 뜰 수밖에 없었다..ㅋㅋㅠ 그리고 다른 분들 풀이 참고..
🧐 새로 알게 된 내용
이런 아이디어.. 어떻게 생각해시는거지?ㅠ
문자열 문제도 주기적으로 풀어줘야겠다ㅠ
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 240302 |
(참고)
✔ 풀이 참고
백준 9081번 단어 맞추기 [JAVA]
문제 BEER라는 단어를 이루는 알파벳들로 만들 수 있는 단어들을 사전 순으로 정렬하게 되면 와 같이 된다. 이러한 순서에서 BEER 다음에 오는 단어는 BERE가 된다. 이와 같이 단어를 주면 그 단어를
javaju.tistory.com
백준 9081번(자바)
백준 9081번을 자바를 이용해 풀어보자
velog.io
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1394번: 암호 (0) | 2024.02.17 |
---|---|
[백준/JAVA] 23352번: 방탈출 (0) | 2024.02.17 |
[백준/JAVA] 17213번: 과일 서리 (1) | 2024.02.15 |
[백준/JAVA] 10164번: 격자상의 경로 (0) | 2024.02.15 |
[백준/JAVA] 15489번: 파스칼 삼각형 (0) | 2024.02.12 |