새소식

Study/Algorithm

[백준] 1668번 트로피 진열 - Node.js/JavaScript

  • -

트로피 진열 

 

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
2 초 128 MB 6125 2962 2497 49.632%

 

문제

민식이는 “오민식”이라는 팀이름으로 수없이 많은 로봇대회를 우승했다. 따라서 민식이의 집에는 트로피가 많다. 민식이는 트로피를 어떤 선반 위에 올려놨다. 이 선반은 민식이의 방문을 열고 들어가자마자 선반의 왼쪽이 보인다. 다른말로 하자면, 뒤의 트로피가 앞의 트로피에 가려져 있다는 말이다.

안타깝게도, 높이가 큰 트로피가 높이가 작은 트로피의 왼쪽에 있다면, 높이가 작은 트로피는 큰 트로피에 가려서 보이지 않게 된다. 트로피는 자기의 앞에 (보는 사람의 관점에서) 자기보다 높이가 작은 트로피가 있을 때만 보이게 된다. 민식이는 선반을 180도 회전시켜서 트로피가 보이는 개수를 변하게 할 수도 있다.

선반위에 올려져 있는 트로피의 높이가 주어졌을 때, 왼쪽에서 봤을 때 보이는 개수와, 오른쪽에서 봤을 때 보이는 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 트로피의 개수 N (1 ≤ N ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 왼쪽의 트로피부터 차례대로 높이가 주어진다. 트로피의 높이는 100보다 작거나 같은 자연수이다.

출력

첫째 줄에 왼쪽에서 봤을 때 보이는 개수, 둘째 줄에 오른쪽에서 봤을 때 보이는 개수를 출력한다.

예제 입력 1 

5
1
2
3
4
5

예제 출력 1 

5
1

예제 입력 2 

4
5
5
5
5

예제 출력 2

1
1

예제 입력 3 

5
1
2
5
2
1

예제 출력 3 

3
3

예제 입력 4 

7
1
4
2
5
3
7
1

예제 출력 4 

4
2

이 문제는 단순하게 left, right를 나눠서 풀면 쉽겠다고 생각했다

const [n, ...trophy] = require('fs').readFileSync('./input.txt').toString().split('\n').map(Number)

let leftMax = trophy[0]
let leftCnt = 1
let rightMax = trophy.at(-1)
let rightCnt = 1

for (let i = 0; i < n; i++) {
  if (leftMax < trophy[i]) {
    leftMax = trophy[i]
    leftCnt++
  }
  if (rightMax < trophy.at(-i)) {
    rightMax = trophy.at(-i)
    rightCnt++
  }
}
console.log(leftCnt)
console.log(rightCnt)

leftMax 는 왼쪽에서 max, 초기 값은 맨 왼쪽인 trophy[0]을 넣어줬다.

rightMax 는 오른쪽에서의 max, 초기 값은 맨 오른쪽 trophy.at(-1)을 넣어줬다.

( .at() 넘나 애정한다...😍 )

leftCnt 는 왼쪽에서 보이는 카운트고, 무조건 1개는 보이니까 초기 값을 1로 넣어줬다.

rightCnt도 마찬가지!

 

그 다음 for문을 돌면서 trophy[i]가 max보다 크면 카운트 시키는 방식으로 코드를 짰다.

 

마지막으로 첫째 줄에 왼쪽에서 보이는 개수, 둘째 줄에 오른쪽에서 보이는 개수를 출력하라고 해서

원래 console.log(leftCnt + '\n' + rightCnt) 

이렇게 해줬으나 통과가 안돼서 각각 한 줄씩 출력해줬다

근데!!!!! 안된다.... 스터디에서 나랑 비슷하게 짠 사람이 있길래

그 분은 통과되는지 물어봤는데 그 분도 안된다!!!!!!1

 

둘다 로컬에서 예제입력할 떄는 굉장히 잘되는데 ㅠㅠ안되는 케이스가 뭐가 있는지,,,또르르,,,

 

Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.