일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- BOJ
- Codeforces
- ceil
- 소수
- mysql
- 큰 수 나누기
- timestamp
- python
- 외래키
- project euler
- 네이밍
- enumerate
- 에라토스테네스의 체
- SUM
- flask
- 2557
- convention
- 리스트 컴프리헨션
- 딕셔너리
- Dictionary
- FOREIGN KEY
- datetime
- list comprehension
- itertools
- 세그먼트 트리
- SUM()
- floor
- 파이썬
- lower_case_table_names
- 자료구조
Archives
- Today
- Total
늒네 기록
[BOJ-JS] 5991번 - Papaya Jungle 본문
5991번: Papaya Jungle (acmicpc.net)
문제를 이해해보자면,
- n by m 격자 칸에 파파야 열매가 있다. 좌측 상단이 (1,1), 우측 하단이 (n, m).
- (1,1)에 사람이 있다. 사람은 칸에 있는 파파야를 전부 먹어치운 다음 상, 하, 좌, 우로 움직일 수 있으며, 처음 주어진 격자 칸을 벗어날 수는 없다.
- 움직일 수 있는 칸들 중 가장 많은 파파야가 있는 곳으로 이동하면서 (n, m)에 도착하면 멈춘다.
이때 중요한 조건이 두 가지가 있는데,
- 어느 순간에도 파파야가 가장 많은 칸은 유일하게 존재한다.
- 어떤 테스트 케이스에서도 (n, m)에 도달할 수 있는 것이 보장된다.
뒤의 두 조건이 더해지면서 매우 간단한 시뮬레이션 문제가 되었다!
[c,...b]=(0+require('fs').readFileSync(0)).split`
`;
[m,n]=c.split` `
a=Array(+m+2).fill(0).map(i=>Array(+n+2).fill(0))
b=b.map(i=>i.split` `)
for(i=0;i<m;i++){for(j=0;j<n;j++)a[i+1][j+1]=+b[i][j]}
r=a[1][1]
p=[1,1]
while(p[0]!=m||p[1]!=n){
[i,j]=p;
a[i][j]=0;
[x,y,v]=[1,0,a[i+1][j]]
if((w=a[i-1][j])>v)[x,y,v]=[-1,0,w]
if((w=a[i][j+1])>v)[x,y,v]=[0,1,w]
if((w=a[i][j-1])>v)[x,y,v]=[0,-1,w]
r+=v;p[0]+=x;p[1]+=y
}
console.log(r)
반응형
'알골 공부 기록 > BOJ' 카테고리의 다른 글
[BOJ-JS] 10451번 - 순열 사이클 (0) | 2024.05.17 |
---|---|
[BOJ-JS] 4363번 - Snow Clearing (0) | 2024.05.17 |
[BOJ-JS] 17848번 - Flight Turbulence (0) | 2024.05.08 |
[BOJ-JS] 12852번 - 1로 만들기 2 (0) | 2024.05.05 |
[BOJ-JS] 17204번 - 죽음의 게임 (0) | 2024.05.04 |
Comments