일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트 문제 풀이
- Next.js13
- next13
- 자바스크립트 문제
- leetcode문제풀이
- Baekjoon
- 타입스크립트
- 자바스크립트 알고리즘
- JavaScript
- leetcode
- 자바스크립트코딩테스트
- 리액트
- HTML
- 자바스크립트 알고리즘 문제
- lodash
- 자바스크립트
- 자바스크립트 연결리스트
- 자바스크립트 문제풀이
- 프론트엔드
- JS
- 제로베이스
- stack문제
- 리액트쿼리
- react
- 알고리즘문제풀이
- NPM
- Next
- til
- CSS
- 프로그래머스
- Today
- Total
코드노트
알고리즘 문제 오답풀이_1 본문
keys
문제 설명
열쇠와 문은 알파벳으로 이루어져있다.
예를 들어 열쇠의 획득 순서는 "bgr", 앞에 놓인 문들은 "RGB"라고 했을 때
r열쇠와 R문이 매칭된다.
g열쇠와 G문이 매칭되고 마지막으로 b문과 B문을 매칭하여 탈출할 수 있다.
이 때, 던전을 탈출할 수 있다면 YES, 탈출할 수 없다면 NO를 출력한다.
테스트 케이스
keys = "rgb"
doors = "RGB"
출력값 NO
- 이 문제는 스택문제였다. 그냥 순서대로 대문자 또는 소문자로 바꾸기만 하면 될 줄 알았다.
- 예를 보게 되면 keys의 첫 문자와 doors의 끝문자가 맞으면 통과되는걸 볼 수 있다.
function solution(keys, doors) {
keys = keys.split('');
doors = doors.split('');
while (keys.length) {
if (keys.pop().toUpperCase() !== doors.shift()) {
return 'NO'
}
}
return 'YES'
}
- split으로 배열을 만들고 while을 순회한다.
- key의 끝문자를 pop을 시키고 대문자로 변경한다. 그리고 doors의 shift를 통해서 앞문자를 서로 비교한다.
function solution(keys, doors) {
keys = keys.split("");
doors = doors.split("").reverse();
for (let i = 0; i < keys.length; i++) {
if (keys[i].toUpperCase() !== doors[i]) {
return "NO";
}
}
return "YES";
}
- while을 사용안하고도 doors를 reverse시킨 후 비교해도 된다.
police
문제 설명
경찰을 1명 뿐이고, 도둑은 k명이 있다.
도둑은 공항에 도착하면 비행기를 타고 도망칠 수 있다.
공항의 위치는 N에 있고 경찰은 현재 0의 위치에 있다.
모든 도둑들은 하나의 직선 상에 존재하고 경찰의 우측과 공항의 좌측편에 위치할 수 있다.
또한 하나의 위치에 여러 도둑이 존재할 수 있다.
1시간이 지날때마다, 도둑과 경찰은 움직이는데 먼저 도둑 한 명이 1시간마다 오른쪽으로 한 칸씩 움직일 수 있다.
만약 도둑이 오른쪽으로 움직였을 때, 그 위치가 공항인 경우에는 도둑은 도망갈 수 있다.
한명의 도둑이 움직이고 나서, 경찰이 움직일 수 있는데 경찰 역시 1시간마다 오른쪽으로 한 칸 씩 움직인다.
이때 경찰의 위치에 있는 도둑은 몇명이든 체포된다. 이 시간들은 경찰이 공항에 도착하면 끝이 나게 되고,
경찰이 공항에 도착할 때까지 최대한으로 도망칠 수 있는 도둑은 몇 명인지 반환하면 된다.
테스트케이스
n = 10
k = 6
theives = [8, 7, 5, 4, 9, 4]
- 문제를 처음 보고 이해가 하나도 안되는 문제... 바로 노트 꺼내서 그림을 그려따.......
- 문제는 간단하게 말하면 0의 위치에서 n의 위치인 공항까지 경찰은 움직인다. 그 사이의 숫자들에 도둑이 있다.
function solution(n, k, theives) {
let police = 0;
let answer = 0;
theives.sort(function (a, b) {
return b - a;
});
for (let i = 0; i < k; i++) {
if (police >= theives[i]) break;
police += n - theives[i];
answer++;
}
return answer;
}
- 도둑의 위치를 내림차순으로 정렬한다.
- k도둑의 수만큼 for문을 돌면서 만약 police변수가 도둑의 위치 i 보다 크거나 같으면 break한다.
- police에는 n - theives[i]를 해주며 값을 더해주고 answer++을 해준다.
'Code note > 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 숫자의 표현 자바스크립트 문제 풀이 (0) | 2022.10.06 |
---|---|
LeetCode 11. Container With Most Water 자바스크립트 문제 풀이 (1) | 2022.09.30 |
프로그래머스 최솟값 만들기 자바스크립트 풀이 (0) | 2022.09.29 |
LeetCode 8. String to Integer (atoi) 자바스크립트 문제 풀이 (0) | 2022.09.27 |
Leetcode 7. Reverse Integer 자바스크립트 문제 풀이 (0) | 2022.09.27 |