문제
https://school.programmers.co.kr/learn/courses/30/lessons/159994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🐍파이썬
from collections import deque
def solution(cards1, cards2, goal):
q1 = deque(cards1)
q2 = deque(cards2)
for i in range(len(goal)):
if q1 and q1[0] == goal[i]:
q1.popleft()
elif q2 and q2[0] == goal[i]:
q2.popleft()
else:
return "No"
return "Yes"
1️⃣ popleft()를 사용하기 위해 deque를 import하여 사용했다.
2️⃣ q1과 q2의 0번째 인덱스에 goal에 해당하는 글자가 존재하면 leftpop()하여 해당 문자를 제거했다.
3️⃣ 만약 두 deque의 0번째 인덱스에 goal의 글자가 없다면 원하는 단어배열을 완성할 수 없다는 뜻이므로 바로 "No"를 리턴한다.
4️⃣ goal의 반복문을 모두 돌았다면 단어배열을 완성했다는 뜻이므로 "Yes"를 리턴한다.
다른 풀이 방법
def solution(cards1, cards2, goal):
idx1,idx2=0,0
for word in goal:
if len(cards1)>idx1 and cards1[idx1]==word:
idx1+=1
elif len(cards2)>idx2 and cards2[idx2]==word:
idx2+=1
else:
return "No"
return "Yes"
cards의 인덱스를 증가시켜주는 것으로 popleft()를 대신했다.
🐥자바스크립트
function solution(cards1, cards2, goal) {
for(let i of goal){
if (cards1 && cards1[0] == i){
cards1.shift()
} else if(cards2 && cards2[0] == i){
cards2.shift()
} else {
return "No";
}
}
return "Yes";
}
위 파이썬 풀이에 사용했던 popleft() 대신 shift() 함수를 사용하여 배열의 첫번째 원소를 제거했다.
1️⃣ cards1과 cards2의 0번째 인덱스에 goal에 해당하는 글자가 존재하면 shift()하여 해당 문자를 제거
2️⃣ 만약 두 배열의 0번째 인덱스에 goal의 글자가 없다면 원하는 단어배열을 완성할 수 없다는 뜻이므로 바로 "No"를 리턴한다.
3️⃣ goal의 반복문을 모두 돌았다면 단어배열을 완성했다는 뜻이므로 "Yes"를 리턴한다.
다른 풀이 방법
function solution(cards1, cards2, goal) {
for(let v of goal) {
if(cards1.includes(v)){
if(cards1.shift() !== v){
return "No";
}
} else {
if(cards2.shift() !== v){
return "No";
}
}
}
return "Yes";
}
shift()로 리턴된 한글자씩 goal의 글자와 비교
function solution(cards1, cards2, goal) {
let j = 0;
let k = 0;
for(let i=0;i<goal.length;i++){
if(goal[i] == cards1[j]) j++;
else if(goal[i] == cards2[k]) k++;
else return "No"
}
return "Yes";
}
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | 파이썬 / 자바스크립트] 문자 반복 출력하기(코딩테스트 입문/ level 0) (0) | 2023.02.23 |
---|---|
[프로그래머스 | 파이썬 / 자바스크립트] 삼각형의 완성조건 (1)(코딩테스트 입문/ level 0) (0) | 2023.02.23 |
[프로그래머스 | 파이썬 / 자바스크립트] 할인 행사(연습문제/ level 2) (0) | 2023.02.23 |
[프로그래머스 | 파이썬 / 자바스크립트] 배열 뒤집기(코딩테스트 입문/ level 0) (0) | 2023.02.23 |
[프로그래머스 | 파이썬 / 자바스크립트] 삼각형의 완성조건 (2)(코딩테스트 입문/ level 0) (0) | 2023.02.23 |
[프로그래머스 | 파이썬 / 자바스크립트] 모음제거(코딩테스트 입문/ level 0) (0) | 2023.02.22 |