백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 2493 , 탑
✔️Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감 🧑💻
1. 최상
2. 상
3. 중
4. 하
이해도 🙆♂️
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
덧붙일 말 🏷️
문제 출처 🏠
https://www.acmicpc.net/problem/2493
요구사항 📋
1. 첫째 줄에 T 가 주어진다.
2. 둘째 줄에 T개의 탑의 높이가 담긴 배열이 주어진다.
3. 각 탑은 순서대로 나열되어있는 상태이고, 문제 해답은 0번 인덱스 -> 1번 위치로 나타낸다.
4. 각 탑의 높이에서 평행하게 왼쪽으로 레이져를 발사했을 때 닿는 탑의 위치를 현재의 탑의 위치 인덱스에 저장한다. 이때, 같은 높이이상일 때만 레이져가 닿는다. 레이져가 0번 인덱스 위치까지 아무런 탑에도 닿지 않는다면, 0을 저장한다.
5. 위 과정을 수행하여 만들어진 배열을 한 줄로 출력하자.
해결 전략 📝
1. 우선 닿지 않는 경우들은 0을 배정해야 하고, 닿는 경우들은 그 위치를 저장해야 한다는 점에서 후자와 같은 유동적인 값말고 전자 처럼, 고정된 값 0으로 입력값 T 만큼의 크기 배열을 선언한다.
2. 0번 인덱스의 위치는 무조건 0이다. 왜냐하면, 왼쪽에 아무것도 없기 때문.
3. while 문을 돌려가면서, store이라는 배열을 선언하여 현재의 인덱스 이전에 가장 높은 탑의 높이와 그 위치를 담아 저장해둔다.
4. 만약, store 에 담긴 빌딩의 높이들이 현재 위치의 탑 높이보다 다 낮가니 같다면, 계속 pop 을해줘서 다 없애준다.
이유는 현재의 위치보다 왼쪽에 높이가 낮거나 같은 탑이 있다면, 이후의 위치에서는 현재의 탑에 가려 안보이기 때문이다.
이때, store에 담긴 값이 다 사라지게 되면 while 문을 탈출해야하므로 조건을 store.length!==0 으로 설정한다.
이 조건은 첫 시작 0번 인덱스에도 해당되지 않는 조건이기 때문에 효율적인 조건이다.
만약, store 에 담긴 빌딩이 현재의 위치 빌딩보다 높다면 레이져가 닿으므로 store 에 담긴 해당 빌딩의 idx를 배열에 할당한다.
항상 while 문을 다 돌고 난 뒤에는 현재 위치의 탑에 대한 정보를 store 에 저장해주고 idx+1 증가 시켜 다음 위치로 이동 시켜주자.
현재 위치를 저장하는 이유는 바로 오른쪽 탑이 현재 위치의 탑보다 같거나 작은 경우들이 있기 때문이다.
문제 예시를 입력하여 진행되는 과정을 아래에 담았다.
5
6 9 5 7 4
현재 위치에서 왼쪽을 봤을 때 보이는 탑 리스트는 store 을 뜻하고, 오른쪽 값을 우선적으로 확인해 나아간다.
각 요소는 높이와 해당 탑의 위치를 담고 있다.
정답 💯
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n")
.map((v) => v.trim().split(" ").map(Number));
const [T, ...nums] = input;
function solution(T, nums) {
let [store, idx] = [[], 0];
let answer = Array.from({ length: T }, () => 0);
nums.map((num) => {
while (store.length !== 0) {
if (store.slice(-1)[0][0] > num) {
answer[idx] = store.slice(-1)[0][1] + 1;
break;
} else store.pop();
}
store.push([num, idx]);
idx += 1;
});
return answer.join(" ");
}
console.log(solution(T[0], nums[0]));
느낀점 🧑💻
'알고리즘 공부 > 백준 - 자바스크립트' 카테고리의 다른 글
백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 1068 , 트리 (0) | 2022.10.27 |
---|---|
백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 14675 , 단절점과 단절선 (0) | 2022.10.27 |
백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 9934 , 완전 이진 트리 (0) | 2022.10.25 |
백준/ Silver 5 문제 , 백준 Node.js 자바스크립트 14929 , 귀찮아 (SIB) (0) | 2022.10.24 |
백준/ Silver 4 문제 , 백준 Node.js 자바스크립트 10546 , 배부른 마라토너 (0) | 2022.10.22 |