computer_study

[탐색] BAEKJOON '1302'번 '베스트셀러'문제 (C++/python) 본문

알고리즘/문제풀이

[탐색] BAEKJOON '1302'번 '베스트셀러'문제 (C++/python)

knowable 2020. 8. 11. 18:25

문제 : www.acmicpc.net/problem/1302

 

1302번: 베스트셀러

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

www.acmicpc.net

 

 

 

  • 문제 해결 아이디어

    1.  python에선 dictionary, c++에선 map함수를 이용하여, key값과 value값을 설정하고 문제를 해결한다.

   

    2.  입력값들을 순회하며, 같은 값이 나올 때 마다 value값을 증가시켜, 마지막에 그중 최대값을 출력한다.

 

 

 

 

  • python

n = int(input())

books = {}

for _ in range(n):
    book = input()
    if book not in books:
        books[book] = 1
    else:
        books[book] += 1

target = max(books.values())
array = []

for book, number in books.items():
    if number == target:
        array.append(book)

print(sorted(array)[0])

※ dictionary

knowable.tistory.com/25 참고

 

 

 

  • c++

#include "iostream"
#include "string"
#include "map"

using namespace std;


int main(){
    
    int n;
    map<string, int> books;
    scanf("%d",&n);
    
    for(int i=0 ; i< n ; i++){
        string tmp;
        cin >> tmp;
        if(books.count(tmp) == 0){
            books.insert(make_pair(tmp,1));
        }
        else{
            books.find(tmp)->second++;
        }
    }
    int max = 0;
    for(auto iter = books.begin(); iter != books.end(); iter++){
        if(iter->second > max)
            max = iter->second;
    }
    
    for(auto iter = books.begin(); iter != books.end(); iter++){
        if(iter->second == max){
            cout << iter->first << "\n";
            return 0;
        }
    }
    
    return 0;
}

 

※ map

knowable.tistory.com/25 참고

Comments