본문 바로가기
알고리즘/Programmers

[TIL] 2023.04.01 Programmers 문제 풀기

by heereal 2023. 4. 2.

Today I Learend

  • Programmers 문제 풀기
  • 기술면접 답변 정리

 


Programmers 문제 풀기

진료순서 정하기

나의 풀이

function solution(emergency) {
    let array = [...emergency].sort((a,b) => b - a)
    return emergency.map((v) => array.indexOf(v) + 1);
}

sort 메서드를 이용해서 emergency를 내림차순으로 (응급 순서가 높은 순으로) 정렬한 배열을 만든다. 그리고 기존 emergency 배열에 map을 돌리는데 이때 내림차순으로 정렬한 배열 array에서 해당 요소를 찾아 index+1을 출력한다. 다른 사람들 풀이 보니 다들 비슷하게 푼 거 같다!

 

 

한 번만 등장한 문자

나의 풀이

function solution(s) {
    let array = [...new Set(s.split("").sort())];
    let answer = "";
    for ( i = 0; i <= array.length - 1; i++ ) {
        let array2 = s.split("").filter((v) => v === array[i]);
        if (array2.length === 1) answer += array[i];
    }
    return answer;
}

일단 Set 객체로 중복된 문자열을 거르고 유일한 값만 저장 배열을 생성한다. 그리고 for문으로 각 문자열마다 filter 메서드를 이용해서 기존 s 문자열에 각 알파벳이 몇 개 들어있는지를 필터링해서, 필터링한 배열의 length가 1일 때만(한 번만 등장하는 문자열인 경우) answer에 더해준 후 최종적으로 answer를 출력한다.

 

 

다른 사람의 풀이

function solution(s) {
    let res = [];
    for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
    return res.sort().join('');
}

진짜 너무 감동적인 풀이 🥹🥹 for문을 돌려서 각 알파벳마다 indexOf와 lastIndexOf로 반환한 인덱스가 일치한다면 문자가 한 번만 등장한 것이기 때문에 배열에 push 한다. 그리고 이 배열을 sort와 join으로 알파벳순으로 정렬한 문자열로 가공한 후 출력한다. indexOf와 lastIndexOf로 인덱스를 비교한다는 아이디어가 너무 좋았던 풀이였다!

 

  • indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.
  • lastIndexOf() 메서드는 주어진 값과 일치하는 부분을 역순으로 탐색하여, 최초로 마주치는 인덱스를 반환하고 일치하는 부분을 찾을 수 없으면 -1을 반환한다.

회고

오늘은 노션에 따로 정리하고 있는 기술면저 질문 다섯 개 정도 더 정리했다. 이번 주는 기술면접 답변 정리 끝내고 다음 주부터 진짜 본격적으로 지원한다!

 

 

댓글