Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- GIT
- Next.js
- react native 개발
- 리엑트 네이티브 아이콘
- react native CLI
- fire base
- 백준
- AWS Access Key
- AWS
- 문자열 대소문자 구별
- img upload
- 문자열 대소문자
- react native
- 리액트
- react native picker
- PongWorld
- firebase 라이브러리
- 리액트 네이티브 에러
- s3 upload
- 리액트 네이티브
- react native font
- react native 세팅
- error
- React
- Access Key 생성
- aws bucket 정책
- js
- 에러
- Project
- babel.config.js
Archives
- Today
- Total
밝을희 클태
[백준 node.js / javascript] 폴리오미노(1342)문제 본문
문제:
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침 없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
출력:
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
코드:
const fs = require("fs");
let map = fs.readFileSync("/dev/stdin").toString().trim();
let answer = "";
const check = (idx, notEnb) => {
if (idx % 4 === 0) while (idx--) answer += "A";
else if (idx % 2 === 0)
while (idx) {
if (idx <= 2) answer += "B";
else answer += "A";
--idx;
}
else {
console.log(-1);
process.exit();
}
if (notEnd) answer += ".";
};
while (1) {
let idx = map.indexOf(".", 0);
if (idx !== -1) check(idx, true);
else if (idx === -1) {
check(map.length, false);
break;
}
map = map.substring(idx + 1);
i = 0;
}
console.log(answer);
코드설명:
문자열중에 '.'문자를 찾고 인덱스를 idx변수에 저장하고 idx가 -1이라는 건 문자열중에 '.'문자가 없는 거기 때문에 반복문을 종료하고 아니면 check함수로 idx와 문자열이 끝인지 아닌지를 bool형식으로 전달해 준다.
while (1) {
let idx = map.indexOf(".", 0);
if (idx !== -1) check(idx, true);
else if (idx === -1) {
check(map.length, false);
break;
}
map = map.substring(idx + 1);
i = 0;
}
문제에서 우선시 되는 값이 "AAAA"이기 때문에 먼저 "AAAA"가 들어갈 자리가 있는지 검사해 주고 그다음 "BB"의 자리를 검사해 준다. 여기서 위의 두 사항에 걸리지 않으면 정상적이지 않은 문자열이 들어온 거기 때문에 -1을 출력해 주고 프로세스를 종료시켜 준다.
정상적인 상황이면 "AAAA", "BB"를 순차적으로 answer문자열에 넣어준 다음 notEnd 변수를 통해서 문자열의 끝인지 아닌지를 판단해서 상화에 맞게 "."을 answer에 넣어준다.
const check = (idx, notEnb) => {
if (idx % 4 === 0) while (idx--) answer += "A";
else if (idx % 2 === 0)
while (idx) {
if (idx <= 2) answer += "B";
else answer += "A";
--idx;
}
else {
console.log(-1);
process.exit();
}
if (notEnd) answer += ".";
};
그리고 다시 반복문으로 돌아와서 위에서 찾은 idx의 다음 idx로 문자열을 새로 할당해 주고, 문자열이 끝날 때까지 반복문을 돈다.
map = map.substring(idx + 1);
'백준' 카테고리의 다른 글
[백준 node.js / javascript] 영화감돔 숌(1436)문제 (0) | 2023.11.01 |
---|---|
[백준 node.js / javascript] 진우의 달 여행(17484)문제 (1) | 2023.11.01 |
[백준 node.js / javascript] 색종이 문제 백준(2563) (0) | 2023.10.22 |
[백준 node.js / javascript]세로읽기 문제 백준(10798) (0) | 2023.10.21 |
[백준 node.js / javascript] 최대값 문제 백준(2566) (0) | 2023.10.21 |