Algorithm

프로그래머스 : 문자열 내 마음대로 정렬하기 (12915)

KJihun 2023. 6. 18. 10:30
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

오늘도 알고리즘 문제를 풀었다. 이번 문제는 굉장히 복잡했다.

우선 구현해야 할 목록을 메모장에 작성했다.

 

1. n번째 글자를 ASCII로 서로 값을 비교해 버블정렬

 

2. 만약  n번째 글자가 같다면

 

2-1. 만약 비교중인 두 문자의 길이가 같다면

2-1-1. 두 개의 int 생성, 첫 번째 글자부터 값이 차이가 나게 되는 글자까지 for문을 사용하여 서로 다른 int에 넣음

2-1-2. 만약 뒤에 있는 int가 더 낮을 시, 현재 위치의 문자와 버블정렬을 통해 교환

 

2-2. 만약 뒤의 문자 길이가 더 짧다면 

2-2-1. 두 개의 int 생성, 짧은 문자열까지 동작하는 for문 생성, int값을 비교 후, 같거나 작다면 현재의 값과 교환

 

까지 생각하고 구현했다. 

코드 실행시 테스트케이스는 통과했으나 채점 시 대부분이 틀렸다.

 

어디서 예외가 발생하는지 도무지 감이 잡히지 않아 질문하기 버튼에 손이 갔다.

subString을 사용하라는 댓글이 눈에 띄어서 subString을 찾아봤다.

어떤 기능을 하는지 자세히 알아보니, 파이썬의 Slice와 같은 기능이었다.

어떻게 사용해야할지 곰곰이 생각해 봤다.

 

고민한 결과 

1. List에 0번째 문자로 n번째 글자를 받음

2. 이후 추가로 문자를 넣음

3. 정렬

4. 0번째 문자를 자른 문자열을 answer 배열에 추가

이렇게 구현해 보기로 했다.

import java.util.*;

public class Sparta_12915 {
    public static void main(String[] args) {
        int n = 1;
        String [] strings = {"abce", "abcd","abcb", "cdx", "asd", "abc"};
        String [] answer;
        List<String> list = new ArrayList<>();
        for(int i = 0; i < strings.length; i++){
            list.add(strings[i].charAt(n)+strings[i]);
        }
        Collections.sort(list);
        answer = new String[list.size()];
        for(int i = 0; i < list.size(); i++){
            answer[i] = list.get(i).substring(1, list.get(i).length());
        }
        System.out.println(Arrays.toString(answer));
    }
}

무사히 수행되었다!

이 문제를 통해 "SubString"이라는 메서드를 알게 되었고, 사용법까지 확실하게 익힐 수 있었다.