알고리즘 문제풀이/백준

#11656 : 접미사 배열

모항 2022. 1. 14. 00:03

풀이방법

사용된 것:

Arryas.sort

배열의 요소들을 사전순으로 정렬한다.

StringBuilder

문자열을 편집할 수 있게 해준다.

 

2022.01.14

문자열이 소문자로만 이루어져있다는 것에서 착안하여, 문자열의 한 글자를 '0'으로 대체함으로써 지워나가는 방법을 선택했다.

앞 글자부터 차례차례 방문하여,

한 글자를 지우고 뒤의 나머지 부분을 접미사 배열에 저장

또 다음 글자를 지우고 나머지 부분을 접미사 배열에 저장

이 과정을 반복하였다.

 

코드

Java(2022.01.14)

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		
		//문자열 읽어오기
		String str = sc.next();
		
		//문자열의 길이
		int len = str.length();
		
		//접미사 배열
		String sufs[] = new String[len];
		
		//StringBuilder 선언
		StringBuilder sb = new StringBuilder(str);
		
		//첫 번째 접미사는 단어 그 자체이다.
		sufs[0] = str;
		
		//두 번째 접미사부터 마지막 접미사까지를 생성하는 반복문
		for(int i = 1; i<len; i++) {
			
			//문자열의 가장 앞 글자부터 지워간다. 지워진 글자는 '0'으로 대체한다.
			sb.setCharAt(i-1, '0');
			
			//지워지지 않은 부분을 접미사로서 저장한다.
			for(int j = 0; j<len; j++) {
				
				if(sb.charAt(j) != '0') {
					
					//'null' + (접미사) 가 저장되는 일을 막기 위한 조건문
					if(sufs[i] == null) {	
						sufs[i] = String.valueOf(sb.charAt(j));
						continue;
					}
					
					sufs[i] += sb.charAt(j);
					
				}
				
			}
			
		}
		
		//접미사들을 사전순으로 정렬
		Arrays.sort(sufs);
		
		for(int i = 0; i<len; i++) {
			System.out.println(sufs[i]);
		}
		
		sc.close();
		

	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#6996 : 애너그램  (0) 2022.01.21
#4583 : 거울상  (0) 2022.01.19
#15904 : UCPC는 무엇의 약자일까?  (0) 2022.01.19
#1026 : 보물  (0) 2022.01.14
#15889 : 호 안에 수류탄이야!!  (0) 2022.01.13