🌞Algorithm/🔥Baekjoon
[Baekjoon] 5093_Letter Replacement
뿌야._.
2025. 1. 24. 23:18
문제(출처: https://www.acmicpc.net/problem/5093)
< Letter Replacement >
문제 풀이
이미 나왔던 문자인지 확인하여 나왔던 문자라면 HashMap을 활용하여 대체한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.HashSet;
public class _5093_ { // Letter Replacement
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = "";
while (!(str = bf.readLine()).equals("#")) {
HashSet<Character> set = new HashSet<>();
HashMap<Character, Character> map = new HashMap<>();
String result = "";
int idx = 1;
for (int i = 0; i < str.length(); i++) {
if (!set.contains(Character.toLowerCase(str.charAt(i)))) {
set.add(Character.toLowerCase(str.charAt(i)));
result += str.charAt(i);
} else {
if (map.containsKey(Character.toLowerCase(str.charAt(i)))) {
result += map.get(Character.toLowerCase(str.charAt(i)));
} else {
if (idx == 1) {
map.put(Character.toLowerCase(str.charAt(i)), '*');
} else if (idx == 2) {
map.put(Character.toLowerCase(str.charAt(i)), '?');
} else if (idx == 3) {
map.put(Character.toLowerCase(str.charAt(i)), '/');
} else if (idx == 4) {
map.put(Character.toLowerCase(str.charAt(i)), '+');
} else if (idx == 5) {
map.put(Character.toLowerCase(str.charAt(i)), '!');
}
result += map.get(Character.toLowerCase(str.charAt(i)));
idx += 1;
}
}
}
bw.write(result + "\n");
}
bw.flush();
}
}
변수)
str : 입력 문자열
result : 출력 문자열
idx : 몇 번째 반복된 문자인지
set : 현재까지 나온 문자
map : HashMap <문자, 대체 문자>
#가 입력되기 전까지 다음 과정을 반복한다.
1) 문자열을 탐색하며 한 번도 나오지 않은 문자라면 set에 추가 및 result에 문자를 추가한다.
2) 이미 나온 문자라면 HashMap을 탐색하여 key값으로 있다면 result에 value를 더해준다. key값으로 없다면 HashMap에 추가하고 result에도 추가한다.
result를 출력한다.
