GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프론트엔드
  • PYTHON
  • 프로그래머스풀이
  • javascript
  • 백준파이썬
  • 프로그래머스자바스크립트
  • 독해
  • 백준
  • 코딩
  • 프로그래밍언어
  • 코딩테스트
  • 코테
  • 프로그래머스
  • 자바스크립트
  • 백준풀이
  • 영어독해
  • 코드업
  • 파이썬
  • 코드업파이썬
  • 영어

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 2493 , 탑
알고리즘 공부/백준 - 자바스크립트

백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 2493 , 탑

2022. 10. 25. 17:53

백준/ 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

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

 

 

 

요구사항 📋

 

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
    '알고리즘 공부/백준 - 자바스크립트' 카테고리의 다른 글
    • 백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 1068 , 트리
    • 백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 14675 , 단절점과 단절선
    • 백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 9934 , 완전 이진 트리
    • 백준/ Silver 5 문제 , 백준 Node.js 자바스크립트 14929 , 귀찮아 (SIB)
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바