1. [1037] 약수
양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
N = int(input())
divider_list = list(map(int, input().split()))
divider_list = sorted(divider_list)
print(divider_list[0] * divider_list[-1])
2. [25192] 인사성 밝은 곰곰이
알고리즘 입문방 오픈 채팅방에서는 새로운 분들이 입장을 할 때마다 곰곰티콘을 사용해 인사를 한다. 이를 본 문자열 킬러 임스는 채팅방의 기록을 수집해 그 중 곰곰티콘이 사용된 횟수를 구해 보기로 했다. ENTER는 새로운 사람이 채팅방에 입장했음을 나타낸다. 그 외는 채팅을 입력한 유저의 닉네임을 나타낸다. 닉네임은 숫자 또는 영문 대소문자로 구성되어 있다. 새로운 사람이 입장한 이후 처음 채팅을 입력하는 사람은 반드시 곰곰티콘으로 인사를 한다. 그 외의 기록은 곰곰티콘을 쓰지 않은 평범한 채팅 기록이다. 채팅 기록 중 곰곰티콘이 사용된 횟수를 구해보자!
N = int(input())
s_dict = {}
cnt = 0
for _ in range(N):
s = input()
if s == 'ENTER':
s_dict = {}
else:
if s not in s_dict:
s_dict[s] = 1
cnt += 1
print(cnt)
3. [26069] 붙임성 좋은 총총이
총총이는 친구 곰곰이의 소개로 제2회 곰곰컵에 출연할 기회를 얻었다! 총총이는 자신의 묘기인 무지개 댄스를 선보여, 여러분의 환심을 사려 한다. 이 댄스는 중독성이 강하기 때문에, 한번 보게 된 사람은 모두 따라 하게 돼버린다. 사람들이 만난 기록이 시간 순서대로 개 주어진다. (총총이는 토끼이지만 이 문제에서는 편의상 사람이라고 가정한다.) 무지개 댄스를 추지 않고 있던 사람이 무지개 댄스를 추고 있던 사람을 만나게 된다면, 만난 시점 이후로 무지개 댄스를 추게 된다.기록이 시작되기 이전 무지개 댄스를 추고 있는 사람은 총총이 뿐이라고 할 때, 마지막 기록 이후 무지개 댄스를 추는 사람이 몇 명인지 구해보자!
N = int(input())
dance_set = set()
for _ in range(N):
A, B = map(str, input().split())
if A == 'ChongChong' or B == 'ChongChong':
dance_set.add(A)
dance_set.add(B)
if A in dance_set or B in dance_set:
dance_set.add(A)
dance_set.add(B)
print(len(dance_set))
4. [2108] 통계학
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
import sys
from collections import Counter
N = int(input())
num_list = list()
for i in range(N):
num_list.append(int(sys.stdin.readline()))
num_list.sort()
print(round(sum(num_list)/N)) # 산술평균
print(num_list[N//2]) # 중앙값
# 최빈값
cnt_num = Counter(num_list).most_common()
if len(cnt_num) > 1 and cnt_num[0][1] == cnt_num[1][1]:
print(cnt_num[1][0])
else:
print(cnt_num[0][0])
print(max(num_list) - min(num_list)) # 범위
5. [20920] 영단어 암기는 괴로워
화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다. 그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려 하고 있다. 화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.
- 자주 나오는 단어일수록 앞에 배치한다.
- 해당 단어의 길이가 길수록 앞에 배치한다.
- 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다
이상인 단어들만 외운다고 한다. 화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.
보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가import sys
from collections import Counter
input = sys.stdin.readline
N, M = map(int, input().rstrip().split())
word_list = list()
for _ in range(N):
word = input().rstrip()
if len(word) >= M:
word_list.append(word)
cnt_word = Counter(word_list).most_common()
cnt_word = sorted(cnt_word, key=lambda x: (-x[1], -len(x[0]), x[0]))
for i in cnt_word:
print(i[0])
'Programing 프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[백준] 19단계: 큐, 덱 (0) | 2023.07.27 |
---|---|
[백준] 18단계: 스택 (0) | 2023.07.21 |
[백준] 16단계: 조합론 (0) | 2023.07.14 |
[백준] 15단계: 약수, 배수와 소수 2 (1) | 2023.07.13 |
[백준] 14단계: 집합과 맵 (0) | 2023.07.11 |