백준/문자열

11656 접미사 배열

have a good time 2021. 10. 18. 19:54

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

 

11656번: 접미사 배열

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

www.acmicpc.net

 

** 주의하기

 

1)

 

String s = br.readLine();
//baekjoon 
 
 word[0]= s;
		
		  
		  for(int i =0; i<7;i++) {
			  s = s.replace(String.valueOf(word[i].charAt(0)), ""); 
			  System.out.println(s);
			  word[i+1] =s;
		  }

이런식으로, baekjoon의 문자열의 맨 앞글자를 replace를 이용해서 제거 하려고 했는데,

동일한 문자열인 o가 나타났을 때는, 두 글자를 모두 제거해서 문제가 생김

 

 

 

 

 

String.valueOf(word[0].charAt(0))을 하면

word[0] ,  baekjoon 글자의 맨 앞글자인 b를 나타내는데,

이는 char형이므로

String.valueOf를 통해 String 형으로 바꿈

 

 

 

2) StringBuffer를 이용해서 한글자씩 잘라나가려고 했는데, 얘도 계속 오류나서 해결하지 못함

(StringBuffer의 delete, deleteCharAt 메소드 이용)

 

 

----------------------

그래서 다른 사람의 코드를 참고해서 작성함

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;



public class Main {

	  public static void main(String[] args) throws IOException {

		  
		  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		  String input[] = br.readLine().split(""); 
	
		  
		  String result[]= new String[input.length];
		  result=input;
		  
		  for(int i=0; i<result.length;i++) {
			  for(int j=i+1;j<result.length;j++) {
			  result[i]+=input[j];
		  }
	  }
		  
	  Arrays.sort(result);
	  
	  for(String value : result) {
		  System.out.println(value);
	  }
	  
	  
	  }
		
		
}

 

참고 자료 : 

https://agility.tistory.com/62

 

[백준 11656번] 접미사 배열 (Java 풀이)

백준알고리즘 11656번 : 접미사 배열 주어진 문자열의 접미사를 모두 출력하되, 알파벳순으로 정렬하여 출력하는 문제이다. Split method를 이용해 받은 문자열을 배열에 담고, 이와 똑같은 배열을

agility.tistory.com