백준 1157번 단어 공부-JS

yugyeongKim·2021년 10월 9일
0

백준

목록 보기
6/52
post-custom-banner

- 내가 첨에 해서 안된 코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('');
let result = '';
let bigArr = []
let numArr = [];
let arr = []; //알파벳
for(let i=65; i < 91; i++) {
    arr.push(String.fromCharCode(i));
}

input.forEach(element => {
    bigArr.push(element.toUpperCase())
});

for(let i=0; i < arr.length; i++) {
    for(let j=0; j < bigArr.length; j++) {
        count = 0;
        if(arr[i] === bigArr[j]) {
            if(numArr[i] > 0) {
                numArr[i] += 1;
            } else {
                numArr[i] = 1;
            }
        }
    }
}

let max = 0;
let stop = false
for(let i=0; i < numArr.length; i++) {
    if(max < numArr[i]) {
        max = numArr[i];
    } else if(max == numArr[i]) {
        console.log('?')
        stop = true;
    }
}

if(stop == false) {
    for(let i=0; i < numArr.length; i++) {
        if(max === numArr[i]) {
            console.log(arr[i])
        }
    }
}

애초에 오류가 많은 처음버전.

문제점: 많은알파벳의 개수가 중복일때 물음표가 여러개뜬다. 최대값이 같으면 ?을 출력하기로 했으니 당연 -> 이걸 break를 넣어 멈추게 했다.

- 두번째 버전(안됨)

for(let i=0; i < numArr.length; i++) {
    if(max < numArr[i]) {
        max = numArr[i];
    } else if(max == numArr[i]) {
        console.log('?')
        stop = true;
        break;
    }
}

이부분만 수정했음. 오 또 안돼..~그래서 테스트인풋을 내가 다른거로 넣어보니 new오류가 발견됨

문제점: input을 abcdefd로 넣어보니 d가 중복된 수가2개로 가장많은데, 배열의 마지막에 d가 한번더 나와 D가 출력되어야 하는데 ?가 출력된다. 왜냐하면 이미 max === numArr[i]가 한번되면 stop = true로 굳어지기 때문이다. -> max < numArr[i] 일 때 stop = false를 추가하고 ?를 출력하는 문장을 stop == false가 아닐때 즉,else일 경우에 넣었다.

- 세번째(드디어 작동)

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('');
let bigArr = []; //단어 대문자로 변경
let numArr = []; //알파벳 자리에 빈도수표시 배열
let arr = []; //알파벳대문자 배열
for(let i=65; i < 91; i++) {
    arr.push(String.fromCharCode(i));
}

input.forEach(element => {
    bigArr.push(element.toUpperCase())
});

for(let i=0; i < arr.length; i++) {
    for(let j=0; j < bigArr.length; j++) {
        if(arr[i] === bigArr[j]) {
            if(numArr[i] > 0) {
                numArr[i] += 1;
            } else {
                numArr[i] = 1;
            }
        }
    }
}

let max = 0;
let stop = false;
for(let i=0; i < numArr.length; i++) {
    if(max < numArr[i]) {
        max = numArr[i];
        stop = false;
    } else if(max == numArr[i]) {
        stop = true;
    }
}

if(stop === false) {
    for(let i=0; i < numArr.length; i++) {
        if(max === numArr[i]) {
            console.log(arr[i])
        }
    }
} else {
    console.log('?')
}

성공.

post-custom-banner

0개의 댓글