🌞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를 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 31047_Warehouse  (1) 2025.01.23
[Baekjoon] 9357_Eligibility  (1) 2025.01.22
[Baekjoon] 6973_Dynamic Dictionary Coding  (0) 2025.01.21
[Baekjoon] 29934_Important Messages  (1) 2025.01.20
[Baekjoon] 9951_Word Extraction  (1) 2025.01.17