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 |
Tags
- s3 upload
- error
- 리액트
- babel.config.js
- AWS
- AWS Access Key
- React
- 리액트 네이티브
- Next.js
- img upload
- aws bucket 정책
- 리액트 네이티브 에러
- 백준
- firebase 라이브러리
- fire base
- 에러
- react native picker
- js
- react native 세팅
- Project
- 문자열 대소문자
- PongWorld
- Access Key 생성
- 문자열 대소문자 구별
- react native
- GIT
- react native 개발
- 리엑트 네이티브 아이콘
- react native CLI
- react native font
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 |