[TIL] 2023.03.16 Programmers 문제 풀기

Today I Learend

  • Programmers 문제 풀기
  • 이력서 작성 및 공개 피드백 위한 이력서 제출

 


Programmers 문제 풀기

서울에서 김서방 찾기

나의 풀이

function solution(seoul) {
    const array = [];
    seoul.map((string, index) => string === 'Kim' && array.push(index))
    return `김서방은 ${array[0]}에 있다`;
}

배열에 push 하는 방법을 이용해서 문제를 풀었다.

 

다른 사람의 풀이

function findKim(seoul){
  var idx = seoul.indexOf('Kim');
  return "김서방은 " + idx + "에 있다";
}

굳이 map 돌릴 필요 없이 indexOf 메서드 사용하면 간단하게 문제 풀 수 있다. 

  • indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.

 

나누어 떨어지는 숫자 배열

나의 풀이

function solution(arr, divisor) {
    let answer = arr.filter((num) => num % divisor === 0).sort((a,b) => a - b)
    return answer.length === 0 ? [-1] : answer;
}

filter 메서드와 sort 메서드를 사용하고, 나누어 떨어지는 요소가 없을 경우에는 삼항 연산자로 예외 처리를 했다.

 

 

핸드폰 번호 가리기

나의 풀이

function solution(phone_number) {
    let answer = "";
    for (i = 0; i <= phone_number.length - 1; i++) {
        i <= phone_number.length - 5 ? answer += "*" : answer += phone_number[i]
    }
    return answer;
}

처음에는 phone_number에 split을 사용해서 배열로 만들어서 문제를 풀었는데, 생각해 보니까 문자열도 length나 index로 접근할 수 있기 때문에 그 부분은 삭제했다.

 

 

다른 사람의 풀이 01

function solution(phone_number) {
    return "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
}

repeat랑 slice 메서드 이용해서 각각 생성한 문자열 합치기! 이런 생각은 어떻게 하는 걸까 너무 신기하다... 확실히 for문 돌리는 것보다 시간 복잡도가 훨씬 줄어든다! 역시 나는 모든 문제를 for문으로 해결하려 하는 게 문제인 거 같다. ㅜㅜ

 

  • repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환합니다.
  • slice() 메소드는 문자열의 일부를 추출하면서 새로운 문자열을 반환합니다.
const str = 'The quick brown fox jumps over the lazy dog.';

console.log(str.slice(31));
// Expected output: "the lazy dog."

console.log(str.slice(4, 19));
// Expected output: "quick brown fox"

console.log(str.slice(-4));
// Expected output: "dog."

console.log(str.slice(-9, -5));
// Expected output: "lazy"

 

이 풀이로 수정해서 다시 풀어봤더니 실행 속도가 현저하게 줄어들었다. 나도 이렇게 멋있는 코드 짜기 위해 노력해야겠다..!

 

 

다른 사람의 풀이 02

function solution(phone_number) {
    return [...phone_number].fill("*", 0, phone_number.length-4).join("");
}

phone_number를 배열로 만든 다음에 배열의 처음부터 phone_number.length-4까지를 "*"로 채운다. 그리고 join메서드를 이용해서 다시 문자열로 합쳐 준다!

 

  • fill() 메서드는 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채웁니다.
const array1 = [1, 2, 3, 4];

// Fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// Expected output: Array [1, 2, 0, 0]

// Fill with 5 from position 1
console.log(array1.fill(5, 1));
// Expected output: Array [1, 5, 5, 5]

console.log(array1.fill(6));
// Expected output: Array [6, 6, 6, 6]

 


회고

월요일까지 이력서를 제출해야 하기 때문에 최종발표회 이후에도 쉬지 않고 이력서를 열심히 작성했다. 그리고 빠른 피드백을 받기 위해 아직 부족한 부분이 많아 부끄럽더라도 내일 있을 공개 피드백에 이력서 링크까지 제출했다. 어떤 피드백을 받을지 좀 걱정된다 🥹 알고리즘 문제 재밌게 푸는 방법 = 이력서 작성하다가 풀면 됨 ㅎㅎ