티스토리 뷰

반응형

Using Language : Java
Using Tool : IntelliJ


  • 프로그래머스 문제 소개

<문자열 내림차순으로 배치하기>

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해
새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

s              return
Zbcdefg        gfedcbZ

알지 못하면 생기는 불행들..

먼저, sort함수는 배열을 오름차순으로 정렬해주는 함수이므로 sort를 쓰기 위해서는
string형을 배열로 변환시키고, 대 소문자를 구별해서 각각 sort로 정렬 후
reverse함수를 쓰기 위해서는 String형이 되어야 한다고 생각해서
배열을 다시 String으로 만들어서 reverse후 대 소문자 분리한 부분을 다시 붙이고..
말만 들어도 복잡한 이 과정을 아스키 코드까지 사용해가면서 했다..

왜그랬지? 그때는 저게 최선이라고 생각했다
애초에 대문자와 소문자를 분리한 것부터 잘못된 시작이였다.

분리해야 올바르게 정렬될 것이라고 생각했으니,,허허 아스키 코드 문자표까지 찾아보고,,
그럴 열정으로 쉬운 풀이법을 참고할걸 그랬다.

그래도 이번에 알게되었으니 잘 참고해서 다른 문제들에 적용하자!


  • 원래 생각한 문제 풀이 과정
  1. 대문자와 소문자 분리
  2. 대문자 소문자 각각 오름차순 정렬
  3. reverse이용해서 뒤집은 후 대, 소문자 이어서 연결
  • 되돌아본 문제 풀이 과정
  1. 대문자와 소문자 분리 → 분리할 필요가 없다 애초에
  2. 대문자 소문자 각각 오름차순 정렬 → split이용하면 쉽게 배열형으로 변경가능 sort사용하기
  3. reverse이용해서 뒤집은 후 대, 소문자 이어서 연결 → reverse사용 list변환을 쉽게 할 수 있다.

<Solution7.java>, <Solution7Test.java>

public class Solution7 {
    public String solution(String s) {
        String answer = "";
        // String 형을 배열에 어떻게 집어넣을지 몰라서
        // 문제가 길어졌는데 split에 대해서 배웠다.
                // split을 사용해서 문자열을 배열로 변경

        String[] arr = s.split("");
        sort(arr);

        // reverse함수가 있다는것을 알았지만 list형 변환법을
        // 모르고 있어서 식이 길어졌지만 배우게 되었다.
        Collections.reverse(Arrays.asList(arr));

        answer = String.join("",arr);
        return answer;
    }
}

public class Solution7Test {
    @Test
    public void 결과() {
        Solution7 solution = new Solution7();

        assertEquals("gfedcbZ", solution.solution("Zbcdefg"));

    }
}

아직 갈 길이 멀었다고 생각되는 문제였다.
별거 아니라고 생각한 문제였는데 알고리즘은 역시 중간에 생각이 꼬이면
늪으로 들어가는것 같다..
다음부터는 이렇게 문제가 복잡해지면 풀이 순서를 다시 생각해 보는게 좋을 것 같다.

github에서 문제 확인하기


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함