Programmers Algorithm

박영호·2021년 4월 13일
0

문제

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

제한 조건

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

입출력 예

stringsnreturn
["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"] 입니다.

풀이

function solution(strings, n) {
  let arr = [];
  let array = [];
    
  for(let i = 0; i<strings.length; i++){
    arr.push(strings[i][n] + strings[i]);
  }
    
  arr.sort();
    
  for (let i=0; i< arr.length; i++){
   array.push(arr[i].slice(1))
  }
  return array;
}

코드 풀면서 느낀점

이번문제를 풀면서 sort를 써야한다는건 알았는데 이걸 어떻게 접근을해서 sort를 해야될지를 잘 몰라서 문제에 대해 고민을 하고 있었는데 접근 방식에 대해서 처음에는
for문을 돌려서 그 문자열의 index값끼리 비교를 할려고 했는데 비교를 한다고 해서 sort가 안될거라 생각이들어 다른 방식으로 접근을 했다. 접근 방식의 경우 위의 예시에서 input값으로 ["sun", "bed", "car"] 들어왔다고 가정을 하면 아래 보여지는 코드처럼

for(let i = 0; i<strings.length; i++){
    arr.push(strings[i][n] + strings[i]);
}

를 사용하여 값 자체를 두번째값을 더함으로써 sun = usun, bed = ebed, car = acar 이런식으로 가장 앞으로 n번째값을 임시로 추가를 한다음에
sort를 하였다. 그리고 for문을 한번더돌아 임의로 추가했던 문자열을 삭제한뒤 새로운 배열에 push를해서 정렬이 되어있는 상태에서 slice를 사용하여 첫번째 부분을 다시 삭제했다. 이런식으로 접근을 해봐서 해보니깐 뭔가 신기했던거 같다. 프로그래머스를 많이 풀다보니 접근 방식도 점점더 다양해지는거 같다.

profile
무언가에 호기심이 생기면 적극적이고 재밌게 그걸 해결해내고 싶어하는 프론트 엔드 개발자 입니다 .

0개의 댓글