[백준 node.js] 1032번 명령 프롬프트
난이도: 브론즈1 (solved.ac 기준)
언어: JavaScript
문제설명
시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.
dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.
이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.
입력값
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳 소문자와 '.' 로만 이루어져 있다.
출력값
첫째 줄에 패턴을 출력하면 된다.
📑풀이 과정
간한한 문자열처리 문제이다.
문자 하나를 기준으로 같은 index에 있는 문자열
을 비교하여 하나라도 다르다면 ?를
모두 같다면 해당문자를 배열에 저장한 후 마지막에 출력하면 된다.
📋풀이 코드
//////입력받는 코드
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split("\n");
let N = +input[0];
const inputFileName = [];
for (let i = 1; i <= N; i++) {
inputFileName.push(input[i]);
}
////////문제 풀이 코드
solution(inputFileName);
function solution(arr) {
let answer = [];
for (let i = 0; i < arr[0].length; i++) {
let temp = arr[0][i];
let num = 0;
for (let j = 0; j < arr.length; j++) {
if (temp !== arr[j][i]) {
answer.push("?");
break;
} else {
num++;
}
if (num === arr.length) answer.push(temp);
}
}
console.log(answer.join(""));
}
💻 코드 설명
입력 값 변환 설명
//////입력받는 코드
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split("\n");
let N = +input[0];
const inputFileName = [];
for (let i = 1; i <= N; i++) {
inputFileName.push(input[i]);
}
백준에서 입력 값을 받기위해 작성한 코드이다.
input 값을 풀이를 위해 변환하여 inputFileName
배열에 push한다..
아래의 예시같이 배열이 나온다.
이 부분 자체가 이해되지 않는다면 아래 링크의 글을 참고하지 바란다.
JavaScript 입력 받기 - 프로그래머스 처럼 풀기
문제 풀이 코드 설명
function solution(arr) {
let answer = [];
for (let i = 0; i < arr[0].length; i++) { //1
let temp = arr[0][i]; //2
let num = 0;
for (let j = 0; j < arr.length; j++) { // 3
if (temp !== arr[j][i]) { //4
answer.push("?");
break;
} else {
num++;
}
if (num === arr.length) answer.push(temp);
}
}
console.log(answer.join(""));//5
}
위의 코드에 숫자를 따라서 설명하겠다.
- 1번 for문은 파일 이름 문자열의 길이이다. 문자열의 길이만큼 for문을 반복한다.
- 비교하는 기준이 되는 문자 저장 배열이다.
- 함수 매개변수로 넘어온 배열의 길이가 비교하는 문자 한 줄이다. 문자의 줄 만큼 for문을 반복한다.
- 기준 문자열(temp)이 arr에 들어있는 문자열과 비교하여 하나라도 다르면 '?'를 push하고 모두 같으면 기준문자열(temp)를 push한다.
- answer배열을 join으로 합하여 정답을 출력한다.
solved.ac 기준 브론즈 1의 문제를 풀어보았다.
체감상 느끼기에 프로그래머스 lv1에서 조금 쉬운 측에 들어가는 듯하다.
난이도를 조금더 올려서 다른 문제들을 풀어보자
'지난 글 모음' 카테고리의 다른 글
[백준 node.js] 1010번 다리놓기 javascript (0) | 2022.02.02 |
---|---|
[백준 node.js] 10870번 피보나치 수5 JavaScript (0) | 2022.02.02 |
[백준-node.js] JavaScript 입력 - vsCode에서 풀기 (0) | 2022.01.30 |
[프로그래머스] LV1 다트게임 JavaScript (0) | 2022.01.29 |
[프로그래머스] LV2 메뉴 리뉴얼 JavaScript (0) | 2022.01.27 |