티스토리 뷰
https://www.acmicpc.net/problem/17140
17140번: 이차원 배열과 연산
첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.
www.acmicpc.net
Tip. 처음 배열의 크기는 3x3, 연산을 거듭할수록 배열은 확장됨.
A[r][c]를 찾을 수 있을 정도로 배열이 확장되지 않았는데, A[r][c]를 찾으려고하면 런타임에러 발생
const fs = require('fs');
const input = fs.readFileSync('./dev/stdin').toString().trim().split('\n');
const [r, c, k] = input.shift().split(' ').map(Number);
let Arr = input.map((v) => v.split(' ').map(Number));
let time = 0;
function funnySort(a, b) {
if (a[1] > b[1]) {
return 1;
} else if (a[1] < b[1]) {
return -1;
} else {
return a[0] - b[0];
}
}
while (time <= 100) {
if (r - 1 < Arr.length && c - 1 < Arr[0].length && Arr[r - 1][c - 1] == k) {
console.log(time);
return;
}
time += 1;
const R = Arr.length;
const C = Arr[0].length;
if (R >= C) {
let length = C;
Arr = Arr.map((row) => {
let numObj = {};
for (let i = 0; i < row.length; i++) {
const num = row[i];
if (num == 0) continue;
if (numObj[num]) {
numObj[num] += 1;
} else {
numObj[num] = 1;
}
}
const result = Object.entries(numObj)
.map((v) => [+v[0], v[1]])
.sort(funnySort)
.flat(1);
length = result.length > length ? result.length : length;
if (length > 100) {
length = 100;
}
return result;
});
Arr = Arr.map((row) => {
if (row.length < length) {
while (row.length < length) {
row.push(0);
}
} else if (row.length > length) {
row = row.slice(0, length);
}
return row;
});
} else {
let tempArr = Array.from(Array(C), () => Array(R).fill(null));
for (let i = 0; i < R; i++) {
for (let j = 0; j < C; j++) {
tempArr[j][i] = Arr[i][j];
}
}
let length = R;
tempArr = tempArr.map((row) => {
let numObj = {};
for (let i = 0; i < row.length; i++) {
const num = row[i];
if (num == 0) continue;
if (numObj[num]) {
numObj[num] += 1;
} else {
numObj[num] = 1;
}
}
const result = Object.entries(numObj)
.map((v) => [+v[0], v[1]])
.sort(funnySort)
.flat(1);
length = result.length > length ? result.length : length;
if (length > 100) {
length = 100;
}
return result;
});
tempArr = tempArr.map((row) => {
if (row.length < length) {
while (row.length < length) {
row.push(0);
}
} else if (row.length > length) {
row = row.slice(0, length);
}
return row;
});
const newR = tempArr[0].length;
const newC = tempArr.length;
Arr = Array.from(Array(newR), () => Array(newC));
for (let i = 0; i < newR; i++) {
for (let j = 0; j < newC; j++) {
Arr[i][j] = tempArr[j][i];
}
}
}
}
console.log(-1);
728x90
'자료구조 알고리즘 > 백준' 카테고리의 다른 글
Node.js) 백준:17779번: 게리맨더링2 (0) | 2023.06.12 |
---|---|
Node.js) 백준:17142번: 연구소 3 (0) | 2023.06.11 |
Node.js)백준 14891번: 톱니바퀴 (0) | 2023.06.11 |
Node.js)백준 14503번: 로봇청소기 (0) | 2023.06.11 |
Node.js)백준 13458번: 시험감독 (0) | 2023.06.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DB 생성
- 면접비
- 로드나인
- create databases;
- 다이나밍프로그래밍
- KMP
- 서버개발
- 서버점검
- MOD
- 면접질문
- 개발자면접
- 은둔청년체험
- BFS
- 투포인터 연습
- MySQL
- 투포인터
- 롱베케이션
- node.js
- create db
- 최소공통조상
- 그래프
- 다이나믹프로그래밍
- 동적프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함