알고리즘🅰/프로그래머스

[프로그래머스] 서울에서 김서방 찾기

개발조각 2022. 2. 21. 21:09
728x90
반응형

"서울에서 김서방 찾기"문제는 진짜 진짜 너무 쉬운 문제라서 거의 5초 컷으로 푼 것 같아요.

이번 문제도 2버전으로 설명하겠습니다.

 

 

처음에 문제만보고 이해가 잘 안돼서 못 풀었는데

간단하게 설명하자면

"seoul배열에서 kim이 몇 번째인지 구하라"라는 문제입니다.

 

테스트 1에서 seoul = ["Jane", "Kim"];

"Kim"은 1번 자리에 위치해서

"김서방은 1에 있다"를 출력해주면 됩니다.


해결방안

function solution(seoul) {
    // 버전 1
    for(let i=0; i<seoul.length; i++){
        if(seoul[i] === 'Kim') return `김서방은 ${i}에 있다`
    }
    
    // 버전 2
    const idx = seoul.indexOf('Kim');
    return `김서방은 ${idx}에 있다`;
}

버전 1은 제가 푼 방식이고요.

버전 2는 "다른 사람의 풀이 보기"에서 본 방식이에요.

 

버전 1. for문, if문 사용

// 버전 1
for(let i=0; i<seoul.length; i++){
    if(seoul[i] === 'Kim') return `김서방은 ${i}에 있다`
}
  • for(let i=0; i<seoul.length; i++) : seoul배열의 길이만큼 반복(테스트 1에서는 2번 반복)
  • if(seoul[i] === 'Kim') : 만약 seoul배열의 i번째의 원소가 'Kim'이라면
  • return `김서방은 ${idx}에 있다`; : "김서방은 i에 있다" 반환하기 (한 줄이라서 중괄호{}는 생략해 주었습니다.)

제가 버전 1, 버전 2에서 문자열 반환 방식을

return "김서방은 " + idx + "에 있다";

이게 아니라

return `김서방은 ${i}에 있다`;

이렇게 써주었습니다.

아래 방식은 템플릿 리터럴 이라고 하는데요.

 

템플릿 리터럴 ("template strings" (템플릿 문자열))

  • ES6부터 새로 도입된 문자열 표기법입니다.
  • 문자열 생성 시 따옴표 대신, 백틱(`)을 사용합니다.
  • ${ } 사이에 변수나 연산 등을 삽입할 수 있습니다.

템플릿 리터럴을 쓰면 문자열과 변수를 한 번에 편하게 쓸 수 있습니다.

 

아래 블로그 링크를 참고해서 썼습니다.👇

https://curryyou.tistory.com/185 

 

[JS] 자바스크립트 템플릿 리터럴: 백틱(``), 달러(${ }) 사용법

# 템플릿 리터럴(Template Literal) ES6부터 새로 도입된 문자열 표기법이다. 문자열 생성시 따옴표 대신, 백틱(`)을 사용한다. var str_01 = `hello world`; # 템플릿 리터럴의 기능 1. 줄바꿈(개행: Multi-line..

curryyou.tistory.com

 

버전 2. indexOf 사용

// 버전 2
const idx = seoul.indexOf('Kim');
return `김서방은 ${idx}에 있다`;

indexOf를 왜 생각을 못했을까요.😓

익숙한 for문에 눈이 멀어 코드 줄만 쓸데없이 길게 썼네요.

 

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

구문 : arr.indexOf(searchElement[, fromIndex])

  • searchElement : 배열에서 찾을 요소입니다.
  • fromIndex Optional : 검색을 시작할 색인입니다. 인덱스가 배열의 길이보다 크거나 같은 경우 -1이 반환되므로 배열이 검색되지 않습니다. 제공된 색인 값이 음수이면 배열 끝에서부터의 오프셋 값으로 사용됩니다. 참고 : 제공된 색인이 음수이면 배열은 여전히 앞에서 뒤로 검색됩니다. 계산 된 인덱스가 0보다 작 으면 전체 배열이 검색됩니다. 기본값 : 0 (전체 배열 검색).
const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison')); // 1
console.log(beasts.indexOf('bison', 1)); // 1
console.log(beasts.indexOf('bison', 2)); // 4

console.log(beasts.indexOf('camel', 1)); // 2
console.log(beasts.indexOf('camel', 2)); // 2

console.log(beasts.indexOf('giraffe')); // -1

일치하는 값이 없으면 -1을 반환합니다.

 

  • const idx = seoul.indexOf('Kim'); : indexOf를 사용해서 idx변수에 seoul배열에 'kim'이 몇번째 인지 담기

여기까지 프로그래머스 서울에서 김서방 찾기 해결방안에 대해 설명해보았습니다.

728x90
반응형