[프로그래머스] 서울에서 김서방 찾기
"서울에서 김서방 찾기"문제는 진짜 진짜 너무 쉬운 문제라서 거의 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'이 몇번째 인지 담기
여기까지 프로그래머스 서울에서 김서방 찾기 해결방안에 대해 설명해보았습니다.