https://www.acmicpc.net/problem/17998

 

1. 문자열의 아무 곳에나 문자를 추가.
2. 문자열 내 어느 곳에서든 문자를 제거.
3. 문자열의 문자를 다른 문자로 변경.

3가지 방법에서 만들어진 문자열을 사전순으로 출력하면 되는 문제이다.

 

중복 없이 출력해야하므로 Set을 이용하는 것이 좋아보인다.

하지만 틀렸대요!!!!!!! 왜?

for(int j=0;j<a.length();j++) {
		for(int i=0;i<b.length();i++) {
			StringBuilder sb = new StringBuilder();
            //끼워 넣기
			sb.append(b.substring(0, i)+a.charAt(j)+b.substring(i,b.length()));
			aa.add(sb.toString());
			sb= new StringBuilder();
            //변경 하기
			sb.append(b.substring(0, i)+a.charAt(j)+b.substring(i+1,b.length()));
			aa.add(sb.toString());
		}
	}

위 코드 때문이다.

끼워 넣기 부분 무언가 수상한 것이 보이지 않나요...

맞습니다 바로 맨마지막에 끼워넣기를 하는 경우가 더해지지 않았던 것..!!

예) ab

cde

를 입력하면 cdea 혹은 cdeb가 나오지 않았다는 점.

 

aa.add(b+a.charAt(j));

반복문 끝에 맨 마지막에 문자열을 끼워넣는 경우를 추가하여 통과하였다.

트리맵으로 하면 시간이 너무 오래걸릴까봐 그냥 Set으로 진행하였는데 문제의 조건을 보니 TreeSet을 이용해도 충분했을 것 같다.

 

 

Ğ̎ĭ̎t̆̎H̆̎ŭ̎b̆̎ :  https://github.com/YunYunYY/Algorithm/tree/eb566eb18e5d769019db9e0a0406a3fd856b5a68/%EB%B0%B1%EC%A4%80/Silver/17998.%E2%80%85Levenshtein%E2%80%85Distance

 

Algorithm/백준/Silver/17998. Levenshtein Distance at eb566eb18e5d769019db9e0a0406a3fd856b5a68 · YunYunYY/Algorithm

Contribute to YunYunYY/Algorithm development by creating an account on GitHub.

github.com

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.StringTokenizer;


public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String a = bf.readLine();
		String b = bf.readLine();
		HashSet<String> aa = new HashSet<String>();
		for(int j=0;j<a.length();j++) {
			for(int i=0;i<b.length();i++) {
				StringBuilder sb = new StringBuilder();
				sb.append(b.substring(0, i)+a.charAt(j)+b.substring(i,b.length()));
				aa.add(sb.toString());
				
				sb= new StringBuilder();
				sb.append(b.substring(0, i)+a.charAt(j)+b.substring(i+1,b.length()));
				aa.add(sb.toString());
			}
			aa.add(b+a.charAt(j));
		}
		for(int i=0;i<b.length();i++) {
			StringBuilder sb = new StringBuilder();
			sb.append(b.substring(0, i)+b.substring(i+1,b.length()));
			aa.add(sb.toString());
		}
		if (aa.contains(b))
			aa.remove(b);
		Object[] bb = aa.toArray();
		Arrays.sort(bb);
		
		for(Object i : bb)
			System.out.println(i);

	}
	
}

'BOJ > Java' 카테고리의 다른 글

백준 Java : #1063 킹  (0) 2025.05.22
백준 Java : #2178  (0) 2022.06.27
백준 Java : #1002  (0) 2022.05.11
백준 Java : #1064  (0) 2022.04.20
Java : Lambda / stream+pipelining / Singleton  (0) 2022.04.01

+ Recent posts