문제
https://school.programmers.co.kr/learn/courses/30/lessons/120904
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🐍파이썬
def solution(num, k):
num = list(map(int, str(num)))
return num.index(k)+1 if k in num else -1
1️⃣ num 각 자리수를 리스트에 넣는다.
2️⃣ 리스트에 k가 있다면 인덱스+1을 리턴, k가 없다면 -1을 리턴한다.
❓ index() vs find()
찾는 원소가 있으면 동일하게 인덱스 값을 리턴하지만 찾는 원소가 없을 경우 find()는 -1을, index()는 AttributeError 에러를 반환한다. (참고: https://ooyoung.tistory.com/78)
파이썬 find( ), index( ) 비교 / 인덱스, 위치를 찾는 함수(Python)
파이썬 find( ), index( ) - 순서 - 1.find / index 공통적인 내용 2.find / index 차이점 1. find( ), index( ) 공통적인 내용 1-1) 두 함수의 동일한 사용방법 '변수. find(찾을 문자)' / '변수. index(찾을 문자)'형태로
ooyoung.tistory.com
다른 풀이 방법
def solution(num, k):
return -1 if str(k) not in str(num) else str(num).find(str(k)) + 1
find()를 사용한 풀이
🐥자바스크립트
function solution(num, k) {
if (num.toString().indexOf(k.toString()) == -1){
return -1
} else{
return num.toString().indexOf(k.toString()) + 1;
}
}
1️⃣ num을 String으로 만든 뒤 indexOf로 첫 번째 등장한 k의 인덱스 값을 찾는다.
2️⃣ 결과가 -1인 경우 문자열을 찾지 못한 경우이므로 -1을 반환하고, -1이 아닌 경우 인덱스+1을 반환한다.
- 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환
- 지정된 요소가 존재하지 않으면 -1을 반환
다른 답안을 참고한 뒤 작성한 풀이
function solution(num, k) {
return num.toString().indexOf(k) + 1 || -1
}
다른 풀이 방법
function solution(num, k) {
return num.toString().split("").map((el) => Number(el)).indexOf(k) + 1 || -1
}
1️⃣ num을 string으로 만들어 한 자씩 잘라 배열로 만들고 map()을 이용해 배열의 원소를 Number형으로 형변환 한다. 이후 Number형 원소로 이루어진 배열에서 k를 찾아 k의 인덱스+1을 반환한다.
2️⃣ OR연산자(||) 왼쪽 문장의 결과값이 인덱스 값(ex. 2)이라면 return 3 || -1이다. 이때 3은 true이므로 뒷부분은 확인할 필요도 없이 true가 된다. 따라서 오른쪽 문장을 실행하지 않고 3을 리턴한다.
만약 배열에서 k를 찾지 못했다면 indexOf는 -1을 반환하고, return 0 || -1이고 0은 false이므로 뒷부분을 확인해야 할 필요가 있다. 따라서 오른쪽 문장이 실행되며 -1이 리턴된다.
❗ 자바스크립트에서 false / Truth
- false: null, false, 0 undefined, NaN, ""(빈 문자열)
- Truth: false를 제외한 모든 값, Infinity
- 참고: https://4urdev.tistory.com/13
[JavaScript TIPs] && 과 || 를 이용한 powerful한 JavaScripting Powerful JavaScript with && and ||
Java, JavaScript 개발을 해 본 사람이라면 &&, || 연산자를 자주 사용할 것이다. 일반적으로 이 두 연산자를 학습할 때 보면, 앞의 항목이 참인지 거짓인지에 따라서 뒤 연산을 하지 않고 넘어가기 때
4urdev.tistory.com
function solution(num, k) {
let ind = (''+num).indexOf(k);
return ind === -1 ? -1 : ind+1;
}
1️⃣ ''+num 을 이용해 num을 문자열로 만든 후 indexOf로 k의 인덱스 값을 찾는다.
2️⃣ ind의 값이 -1이라면 -1을 리턴, -1이 아니라면 인덱스 값 + 1을 리턴한다.
function solution(num, k) {
var answer = num.toString()
if (answer.includes(k)) {
return answer.indexOf(k) + 1;
} else {
return -1;
}
}
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | 파이썬 / 자바스크립트] 최댓값 만들기 (2)(코딩테스트 입문/ level 0) (0) | 2023.02.21 |
---|---|
[프로그래머스 | 파이썬 / 자바스크립트] 숨어있는 숫자의 덧셈 (1)(코딩테스트 입문/ level 0) (0) | 2023.02.20 |
[프로그래머스 | 파이썬 / 자바스크립트] 문자열 정렬하기 (2)(코딩테스트 입문/ level 0) (0) | 2023.02.20 |
[프로그래머스 | 파이썬 / 자바스크립트] 머쓱이보다 키 큰 사람(코딩테스트 입문/ level 0) (0) | 2023.02.20 |
[프로그래머스 | 파이썬 / 자바스크립트] 2차원으로 만들기(코딩테스트 입문/ level 0) (0) | 2023.02.20 |
[프로그래머스 | 파이썬 / 자바스크립트] 피자 나눠 먹기 (1)(코딩테스트 입문/ level 0) (0) | 2023.02.20 |