[6/13 TIL]readline/Set 사용기

haegnim·2023년 6월 13일

TIL

목록 보기
10/52
post-thumbnail

readline 모듈 사용기

readline 모듈 : Readable Stream에서 한 번에 한 줄 씩 데이터를 읽기 위한 인터페이스를 제공

  • 인터페이스 불러오기
//readline 모듈 불러오기
let readline = require('readline');
//인터페이스 생성하기
let rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

입력값을 받을 때 콘솔에 원하는 문구로 input값을 받고 싶었다.
question과 on, 둘 사이에서 어떤 것을 사용할지 고민했다.
나는 숫자를 맞출 때까지 계속 질문을 돌리고 싶어서 on line을 선택했다.

  • question은 문답을 받으면 종료된다.
rl.question(trying + '번째 시도 :', (input) => console.log(input));
  • on line은 이벤트 단위로 실행되어 이벤트가 종료할 때 까지 계속 문답을 받는다.
rl.on('line', function (line) {
});

다른 조원들의 코드를 보니 question을 사용해서 재귀함수로 다시 질문을 던지는 방법도 가능했다. 나는 아직 콜백함수를 잘 몰라서 시도하기 어려웠지만 다음에는 도전해봐야겠다.


자리와 개수가 맞으면 : S, 개수만 맞는다면 : B

S를 구하는 것은 어렵지 않다. 랜덤값을 받은 배열과 입력값의 배열을 비교하여 같은 수 만큼 S를 늘려준다.

B를 구하는 방법은 사람마다 다를텐데, 나는 랜덤값과 입력값의 교집합을 cross라는 변수에 넣어주었다.

그리고 S와 B의 중복을 피하기 위해 S의 개수가 증가하면 B의 개수를 줄이는 식을 사용하였다.

cross = random.filter((x) => write.includes(x));
    for (let i = 0; i < random.length; i++) {
        if (random[i] === write[i]) {
            answerS.push(write[i]);
            cross.pop();
        }
    }

Set 써보기

기능이 구현조차 안됐는데 정리하면서 하기엔 어려우니까. 처음엔 구현에만 집중하였다. 다른 분들의 코드리뷰를 듣고 나서 나도 깔끔한 코드를 쓰고 싶다는 생각이 들었다. 일단 오늘 만든 코드부터 다듬어 보자

before

function randomBall(min, max) {
    for (let i = 0; i < 3; i++) {
        const random = Math.floor(Math.random() * (max - min) + min);
        // 인덱스와 대조 / 없으면 -1
        if (randomArray.indexOf(random) === -1) {
            //배열 끝에 값을 넣음
            randomArray.push(random);
        } else {
            //값이 겹쳐서 하나가 없어지면 for문이 한번 더 돌게 i를 -해줌
            i--;
        }
    }
    return randomArray;
}

처음 내가 참조한 코드는 .indexOf()를 사용하여 중복되는 숫자를 걸러내려 하였다. 코드 작성후에 Set()이라는 집합에 대해 알게되었다. 중복되는 값이 저장이 안된다는 점과 교집합을 뽑아낼 수 있다는 점에서 Set()으로 코드를 다르게 짜보고 싶었다.

after

const randomArray = new Set();
const randomBall = (min, max) => {
    while (randomArray.size < 3) {
        const random = Math.floor(Math.random() * (max - min) + min);
        randomArray.add(random);
    }
    console.log('정답=>' + [...randomArray]);
};

배열만 써보다가 Set을 쓰니까 여러면이 헷갈렸다

  • arr.length => set.size
  • arr.push => set.add
  • console.log(arr) => [...randomIndexArray]

구현하고 나서 정리하는 것도 어렵다.
평소에 코드를 깔끔하게 쓰는 방법들도 공부해야 한다.

0개의 댓글