728x90
🧪 6137 문자열 생성
난이도 : 🌟 골드 4
유형 : 문자열
6137번: 문자열 생성
첫 번째 줄에 문자열 S의 길이 N이 주어진다. (N <= 2,000) 이후 N개의 줄에 S를 이루는 문자들이 주어진다.
www.acmicpc.net
📝 문제

N개의 문자로 이루어진 문자열 S가 입력된다.
이 문자열의 각 문자들로 새로운 문자열 T를 만들려고한다.
문자열 S로 문자열 T를 만드는 규칙은 다음과 같다.
- 문자열 S의 가장 앞의 문자 하나를 문자열 T의 마지막에 추가한다.
- 문자열 S의 가장 뒤의 문자 하나를 문자열 T의 마지막에 추가한다.
위 규칙으로 만들어진 문자열 T들 중 사전순으로 가장 빠른 문자열을 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에 문자열 S의 길이 N이 주어진다. (N <= 2,000)
이후 N개의 줄에 S를 이루는 문자들이 주어진다.
출력
만들어진 사전순으로 가장 빠른 문자열을 출력한다. 80글자마다 새줄 문자를 출력해야 한다.
🚧 주의할 점
1. 문자열 S가 하나의 문자만 남은 경우 마지막에 추가해준다.
🧐 핵심 로직
◈ 문자열 S의 가장 앞의 문자와 문자열 S의 가장 뒤의 문자를 비교해서 작은 문자를 새로운 문자열에 추가해준다.
◈ 이때, 문자열 S의 가장 앞과 뒤의 문자가 같다면 둘이 다를때 까지 반복하고 끝까지 같은 문자만 존재한다면 앞 혹은 뒤의 어느 문자든 새로운 문자열에 추가해주고 1번부터 다시 반복한다.
💻 최종 코드 (152 ms)
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));
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
int n = Integer.parseInt(br.readLine());
List<String> wordGroup = new ArrayList<>();
for (int i=0; i<n; i++) {
wordGroup.add(br.readLine());
}
List<String> newWord = new ArrayList<>();
StringBuilder result = new StringBuilder();
for (int i=0; i<n-1; i++) {
if (wordGroup.get(0).compareTo(wordGroup.get(wordGroup.size() - 1)) > 0) {
newWord.add(wordGroup.get(wordGroup.size() - 1));
wordGroup.remove(wordGroup.size() - 1);
}
else if (wordGroup.get(0).compareTo(wordGroup.get(wordGroup.size() - 1)) < 0) {
newWord.add(wordGroup.get(0));
wordGroup.remove(0);
}
else {
int j = 1;
while (j < wordGroup.size() && wordGroup.get(j).compareTo(wordGroup.get(wordGroup.size() - 1 - j)) == 0) {
j++;
}
if (j == wordGroup.size()) {
newWord.add(wordGroup.get(0));
wordGroup.remove(0);
} else if (wordGroup.get(j).compareTo(wordGroup.get(wordGroup.size() - 1 - j)) > 0) {
newWord.add(wordGroup.get(wordGroup.size() - 1));
wordGroup.remove(wordGroup.size() - 1);
} else {
newWord.add(wordGroup.get(0));
wordGroup.remove(0);
}
}
if (newWord.size() == 80) {
result.append(String.join("", newWord)).append("\n");
newWord.clear();
}
}
result.append(String.join("", newWord)).append(wordGroup.get(0));
System.out.println(result.toString());
}
}
'Hub Algorithm > 문자열' 카테고리의 다른 글
[BOJ] 백준 17828 : 문자열 화폐 (java) (2) | 2024.02.04 |
---|