n=int(input())
dic={}

for i in range(n):
    book=input()
    if book not in dic:
        dic[book]=1
    else:
        dic[book]+=1
    
list=[]
M=max(dic.values())
for i in dic:
    if M==dic[i]:
        list.append(i)
list.sort()
print(list[0])

<코드설명>

하루 팔린 책의 개수인 n을 입력받고 for문으로 n개의 book을 입력받았다.

book이 dic에 없다면, dic[book]에 1을 저장해준다. 그렇지 않으면 dic[book]값을 1씩 늘려준다.

M에 dic 값 중 가장 큰 값을 저장해준다. 

dic의 값 중에 최대값인 M과 동일하다면 list에 그 key값을 저장해주었다. key 값이 여러개이면 사전 순으로 가장 앞서는 제목을 출력해야 한다. 따라서 list를 sort해주었다.

가장 앞선 제목인 list[0]의 값을 출력해주었다.

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 4358 생태학  (0) 2022.09.18
[BOJ] 20291 파일 정리  (0) 2022.09.17
[BOJ] 7785 회사에 있는 사람  (0) 2022.09.11
[BOJ] 10815 숫자 카드  (0) 2022.09.10
[BOJ] 1235 학생 번호  (0) 2022.07.03

import sys
input = sys.stdin.readline
n=int(input())
dic=dict()
for i in range(n):
    name, el=map(str, input().split())
    if el=="enter":
        dic[name]=1
    else:
        del dic[name]
    
dic=sorted(dic.keys(), reverse=True)
for i in dic:
    print(i)

<코드 설명>

입력받을 출입 기록 수를 n에 입력받았고, dic에 dict()를 지정해주었다.

n만큼 입력받기 위해 for문을 이용해주었고, 이름(name)과 출입기록(el)을 입력받았다.

el이 enter이면 dic의 name을 1로 저장해주고, el이 leave이면 dic의 name을 삭제해주었다.

회사에 있는 사람의 이름을 사전 순의 역순으로 출력해야 하므로 sorted(dic.keys(), reverse=True)를 작성해주었다.

dic에 남은 값들을 하나씩 출력해주도록 하였다.

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 20291 파일 정리  (0) 2022.09.17
[BOJ] 1302 베스트셀러  (0) 2022.09.11
[BOJ] 10815 숫자 카드  (0) 2022.09.10
[BOJ] 1235 학생 번호  (0) 2022.07.03
[BOJ] 1316 그룹 단어 체커  (0) 2022.06.26

<코드설명>

- 시간 초과 코드

import sys

n=int(input())
card=list(map(int, sys.stdin.readline().split()))
m=int(input())
chk=list(map(int, sys.stdin.readline().split()))

for i in chk:
    if i in card:
        print("1", end=' ')
    else:
        print("0", end=' ')

실행은 제대로 되었지만, 시간 초과라는 결과가 나왔다.

따라서 아래와 같은 코드로 바꿔주었다.

 

- 실행 코드

import sys
n=int(input())
card= set(map(int,sys.stdin.readline().split()))
m=int(input())
chk=list(map(int, sys.stdin.readline().split()))

for i in chk:
    if i in card:
        print("1", end=' ')
    else:
        print("0", end=' ')

상근이가 가지고 있는 숫자 카드 개수인 n을 입력받고, 그 카드에 적혀있는 숫자를 card에 받아주었다. 이때, set을 이용하여 시간복잡도를 줄일 수 있도록 하였다. 또, 확인할 숫자카드의 개수인 m을 입력받고 그 카드에 적혀있는 숫자를 chk에 받아주었다. 

chk에 저장된 수를 하나씩 살펴보기 위해 for문을 사용하였고, card에 그 숫자가 포함되어 있다면 1을 출력하도록 하였다. 그리고 그렇지 않은 경우, 0을 출력하도록 하였다.

 

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1302 베스트셀러  (0) 2022.09.11
[BOJ] 7785 회사에 있는 사람  (0) 2022.09.11
[BOJ] 1235 학생 번호  (0) 2022.07.03
[BOJ] 1316 그룹 단어 체커  (0) 2022.06.26
[BOJ] 2108 통계학  (0) 2022.06.25

n=int(input())
arr=[]
for _ in range(n):
    arr.append(input())
for i in range(1, len(arr[0])+1):
    back=[]
    for j in range(n):
        if arr[j][-i:] not in back:
            back.append(arr[j][-i:])
        else:break
    if len(back)==n:
        print(i)
        break

<코드 설명>

학생 수 n을 입력받고 그만큼 학생 번호를 for문을 이용하여 arr라는 list에 입력받는다. 

학생 번호의 길이가 모두 같기 때문에, arr[0]의 길이를 기준으로 1부터 len(arr[0])+1까지 반복해주었다. n명의 학생들의 번호를 모두 확인해주기 위해 n만큼 for문을 돌려주었다. arr[j][-i:]가 back에 없으면 추가해주었고 있다면, 구별할 수 없는 것이기 때문에 break해주었다. 

back의 길이가 n과 동일해지면 i를 출력해주고 break해준다.

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 7785 회사에 있는 사람  (0) 2022.09.11
[BOJ] 10815 숫자 카드  (0) 2022.09.10
[BOJ] 1316 그룹 단어 체커  (0) 2022.06.26
[BOJ] 2108 통계학  (0) 2022.06.25
[BOJ] 1978 소수 찾기  (0) 2022.06.25

+ Recent posts