반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩테스트 자바
- 싸피 기자단
- 코드트리
- swea
- 싸피 대전캠퍼스
- 프론트엔드
- 코딩테스트
- 싸피
- 싸피 12기
- 자바스크립트
- 백준
- 리액트
- 싸피11기
- jpa
- 싸피 10기
- 자바스크립트 자료구조
- 알고리즘
- 비동기
- ssafy
- 개발자
- 싸피10기
- 싸피 11기
- 자바 코딩테스트
- SSAFYcial
- 자료구조
- 프로그래머스
- 자바 알고리즘
- 싸피셜
- 알고리즘 자바
- 인프런
Archives
- Today
- Total
병아리의 코딩 일기
[JS] 프로그래머스 Lv 1. 카드뭉치 (풀이) 본문
내 풀이 (통과)
function solution(cards1, cards2, goal) {
const length = goal.length;
for (let i = 0; i < length; i++) {
if (goal[0] === cards1[0]) {
goal.shift();
cards1.shift();
}
if (goal[0] === cards2[0]) {
goal.shift();
cards2.shift();
}
}
if (goal[0] === undefined) {
return "Yes";
}
return "No";
}
goal과 cards 의 0번 인덱스를 비교하고 지우고를 반복하면 된다.
다른 사람들은 이 방법을 for of 문을 이용해서 더 쉽게 짰다. 나도 for of 잘 쓰고 싶어..
function solution(cards1, cards2, goal) {
for(const s of goal) {
if(cards1[0] == s) {
cards1.shift();
} else if(cards2[0] == s) {
cards2.shift();
} else {
return "No"
}
}
return "Yes";
}
난 처음엔 아래 코드와 같이 indexOf 로 접근했다.
function solution(cards1, cards2, goal) {
for (let i = 0; i < cards1.length - 1; i++) {
if (goal.indexOf(cards1[i]) > goal.indexOf(cards1[i + 1])) {
return "No";
}
}
for (let i = 0; i < cards2.length - 1; i++) {
if (goal.indexOf(cards2[i]) > goal.indexOf(cards2[i + 1])) {
return "No";
}
}
return "Yes";
}
이렇게도 해보고,,
function solution(cards1, cards2, goal) {
let arr = [];
let arr2 = [];
let index1 = 0;
let index2 = 0;
for (let i = 0; i < cards1.length; i++) {
for (let j = 0; j < goal.length; j++) {
if (cards1[i] === goal[j]) {
index1 = goal.indexOf(cards1[i]);
arr.push(index1);
}
}
}
for (let i = 0; i < cards2.length; i++) {
for (let j = 0; j < goal.length; j++) {
if (cards2[i] === goal[j]) {
index2 = goal.indexOf(cards2[i]);
arr2.push(index2);
}
}
}
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
return "No";
}
}
for (let i = 0; i < arr2.length - 1; i++) {
if (arr2[i] > arr2[i + 1]) {
return "No";
}
}
return "Yes";
}
이렇게 써보니 테스트 케이스 25번만 실패를 했는데,
문제의 조건 중 '카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.' 에 걸렸다.
아예 방법을 바꿔버리자 하고 차근 차근 생각했는데 결국 통과되었다.
이번 문제를 풀면서
코딩테스트를 잘 풀기 위해서는
애초에 논리적으로 생각을 잘 하는 것이 중요하다는 걸 느꼈다.
논리적인 생각을 코드로 옮기면 되니까,,!!
그게 어렵지만 말이다 ㅋㅎㅋ
쨋든 다음 문제로 넘어가보자!
궁금한 점이나 코멘트 환영합니다. :)
728x90
반응형
LIST
'코딩테스트 Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv.1] 자릿수 구하기 - 색다른 풀이 (0) | 2023.07.26 |
---|---|
자연수 뒤집어 배열로 만들기 (0) | 2023.05.01 |