두치의 개발공부

BaekJoon_1032(베스트셀러) 본문

알고리즘

BaekJoon_1032(베스트셀러)

Du_chi 2022. 6. 28. 07:30

문제

https://www.acmicpc.net/problem/1302

 

1302번: 베스트셀러

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고

www.acmicpc.net

 

문제풀이

가장 많이 팔린 책이 여러권일 때 사전순이기 때문에 먼저 입력받은 책들을 sort한 후 시작하였다.

먼저 배열의 첫번째 책을 변수로 할당하고 입력받은 책들을 반복문 돌면서 지금 책과 반복문의 책이 같으면 count를 +1 하고, 같지 않으면 count를 1로 바꿔준다.

현재의 count(nowCnt)가 가장 많이 팔린 책의 count(maxCnt)보다 크면 책 이름을 바꿔준다.

 

Object를 만들어 각 책을 Key값으로 하고 count 횟수를 value로 하여 max값을 찾는 방법도 있다.

 

소스코드

const answer = ([input,...n]) => {


    const books = n.sort();

    let maxCnt = 0; // 가장 많이 팔린 책의 수
    let nowCnt = 0; // 현재 검색하고 있는 책의 수
    let maxBook = ''; // 가장 많이 팔린 책의 이름
    let nowBook = books[0]; // 비교를 위하여 책의 첫번째 요소를 할당

    books.forEach(data => {
        // 현재의 책과 과거의 책이 같은면 카운트 + 1 / 같이 않으면 카운트 = 1
        if(nowBook === data){
            nowCnt += 1;
        }else{
            nowCnt = 1;
        }

        // 현재의 카운트가 가장 많이 팔린 책의 수 보다 크면 가장 많이 팔린 책의 이름과 카운트를 변경
        if(maxCnt < nowCnt){
            maxBook = nowBook
            maxCnt = nowCnt
        }
        nowBook = data;
    })

    console.log(maxBook);

}

const input = [];
require("readline")
    .createInterface(process.stdin, process.stdout)
    .on("line", (line) => {
        input.push(line);
    })
    .on("close", () => {
        answer(input);
        process.exit();
    });

 

소스코드는 깃헙에서도 확인이 가능합니다 🤗

https://github.com/duduchi/Algorithm/blob/main/Search/BaekJoon_1302.js

 

GitHub - duduchi/Algorithm: 알고리즘 이론 및 구현 소스 정리 프로젝트 입니다.

알고리즘 이론 및 구현 소스 정리 프로젝트 입니다. Contribute to duduchi/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘' 카테고리의 다른 글

BaekJoon_1236 (성 지키기)  (0) 2022.07.05
BaekJoon_1668(트로피 진열)  (0) 2022.06.29
BaekJoon_1568(새)  (0) 2022.06.27
BaekJoon_1543(문서 검색)  (0) 2022.06.23
BaekJoon_1541(잃어버린 괄호)  (0) 2022.05.11