코딩테스트

프로그래머스 - 문자열 내 마음대로 정렬하기 (레벨1, swift)

momo_9 2020. 6. 24. 16:23

 

문제출처 👇

programmers.co.kr/learn/courses/30/lessons/12915

 

문제설명 👀

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.

 

제한사항

    -  strings는 길이 1 이상, 50이하인 배열입니다.

    -  strings의 원소는 소문자 알파벳으로 이루어져 있습니다.

    -  strings의 원소는 길이 1 이상, 100이하인 문자열입니다.

    -  모든 strings의 원소의 길이는 n보다 큽니다.

    -  인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

입출력 예

strings n return
["sun", "bed", "car"] 1 ["car", "bed", "sun"]
["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]


입출력 예 설명

입출력 예 1
sun, bed, car의 1번째 인덱스 값은 각각 u, e, a 입니다. 이를 기준으로 strings를 정렬하면 [car, bed, sun] 입니다.

입출력 예 2
abce와 abcd, cdx의 2번째 인덱스 값은 c, c, x입니다. 따라서 정렬 후에는 cdx가 가장 뒤에 위치합니다. abce와 abcd는 사전순으로 정렬하면 abcd가 우선하므로, 답은 [abcd, abce, cdx] 입니다.

 

 

문제풀이

-> 문제가 살짝 복잡하게 보였던 것에 비해 생각보다 간단하게 풀었는데(15분 정도 소요)

다른 사람 풀이를 보니까 내가 약간 야매로 푼 느낌이 있다......ㅋㅋ

 

각 스트링의 n번째 index의 문자열을 오름차순으로 정렬하면 되는 것인데 난 아래와 같이 해결했다

 

1) 각 문자열의 n번째의 문자를 맨 앞에다가 "_"와 함께 붙여준다.

예를 들어 [abce, abcd, cdx] -> [b_abce, b_abcd, d_cdx] 이렇게 바꿔준다.

2) 이걸 오름차순으로 정렬하고!

3) "_"를 기준으로 문자열을 잘라내어 나머지만 출력하면 된다.

 

이렇게 하면 n번째 문자열이 같은 경우에도 따로 조치해주지 않아도 자동으로 오름차순으로 정렬이 된다.

너무 간단하지 않나?ㅋㅋㅋㅋ근데 문제의 의도는 이게 아닌거 같지만...

어쨌든 정답이 나왔음 됐지뭐🙄