반응형
백준 [단계별로 풀어보기]: (20단계) "심화 2", python
1. 문제번호 및 정답비율

2. 문제별 필요 지식 및 풀이 포인트
더보기
# 1. 1037 약수
# 2. 25192 인사성 밝은 곰곰이
arr = set() #중복확인을 위한 집합set과 (<-배열list선언 시 시간초과 발생)
cnt = 0 #개수세기를 위한 정수형 객체를 각각 선언해야
# 3. 26069 붙임성 좋은 총총이
아예 집합set 자료구조에 "ChongChong"을 선언 후 입력값들이 set에 있으면, add해준다.
포인트 : 추지 않고 있던 사람이 추고 있던 사람을 만나게 된다면, 만난 시점 이후로 추게 된다.
# 4. 2108 통계학 / 다시풀기
import sys
input = sys.stdin.readline 을 사용하지 않으면, 시간초과가 발생한다!
Jupyter에서는 지원하지 않아서, 항상 이 부분에서 Error가 발생한다. 알아서 주의할 것!
# 5. 20920 영단어 암기는 괴로워 / 다시풀기
3. 문제별 풀이 코드
# 1. 1037 약수
'''for문 돌릴 필요없네..?'''
n = int(input()) # 1과N을 제외한, N의 약수의 개수
a = sorted(list(map(int, input().split()))) # N의 약수
N = a[0]*a[-1]
print(N)
# 2. 25192 인사성 밝은 곰곰이
'''set()으로 중복처리 해줬는데도 틀렸다고 뜨네? 흠..'''
'''import re
n = int(input())
cnt = []
for _ in range(n):
m = re.sub('[^a-zA-Z0-9]','',input()) #그냥 input()해서 문제였던건가? 아니네
if m != "ENTER":
cnt.append(m)
else: pass
print(len(set(cnt))) #set()중복처리'''
# 두번째 풀이, set(), [a-z0-9]의 정규식은 필요없으며,
n = int(input())
arr = set() #중복확인을 위한 집합set과 (<-배열list선언 시 시간초과 발생)
cnt = 0 #개수세기를 위한 정수형 객체를 각각 선언해야
for _ in range(n):
m = input()
if m != "ENTER":
if m not in arr:
cnt += 1
arr.add(m)
else:
arr.clear() # "ENTER"만나면 들어갈 값 초기화 arr=[]
print(cnt)
# 3. 26069 붙임성 좋은 총총이
# 첫번째 시도 : "ChongChong"를 찾고나서 부터 cnt++해줄 목적으로 리스트슬라이싱?을 생각함
'''n = int(input())
cnt = 0
for _ in range(n):
i = list(map(str, input().split()))
if i[0] == "ChongChong" or i[1] == "ChongChong":
cnt += 1
print(cnt)'''
# 두번째 시도 : 아예 집합set 자료구조에 "ChongChong"을 선언 후 입력값들이 set에 있으면, add해준다.
# 포인트 : 추지 않고 있던 사람이 추고 있던 사람을 만나게 된다면, 만난 시점 이후로 추게 된다.
n = int(input())
cnt = {"ChongChong"}
for i in range(n):
x,y = input().split() #x[0], x[1]형태로 선언하기 귀찮으니 객체y를 하나 더 선언
if x in cnt:
cnt.add(y)
if y in cnt:
cnt.add(x)
print(len(cnt))
# 4. 2108 통계학
'''시도1, 시도2 전부 시간초과 발생 => input() 때문에 시간초과 난거..다!!! '''
'''
시도1 : 최빈값 알고리즘 : Refer) https://dbjnhn.tistory.com/12
def sol(arr):
while len(arr) != 0:
for idx, item in enumerate(set(arr)):
arr.remove(item)
if idx == 0: return item
return -1
'''
'''
시도2 : Counter라이브러리 Refer) https://leedakyeong.tistory.com/
#평균
def avg(x):
return round(sum(m)/n)
#중앙값
def median(x):
if n == 1: return x[0]
else: return x[n//2]
#최빈값
from collections import Counter #Counter
def mode(x):
if n == 1: return x[0]
c = Counter(x).most_common(2) #Counter(x).most_common() #최빈값 내장함수
return c[1][0] if c[0][1] == c[1][1] else c[0][0]
#범위
def diff(x):
return x[-1]-x[0]
n = int(input()) #n is odd, 5
m = sorted([int(input()) for _ in range(n)]) #1 3 8 -2 2 => [-2,1,2,3,8]
print(avg(m))
print(median(m))
print(mode(m))
print(diff(m))
'''
import sys
input = sys.stdin.readline
n = int(input()) #n is odd, 5
m = sorted([int(input()) for _ in range(n)]) #1 3 8 -2 2 => [-2,1,2,3,8]
print(round(sum(m)/n)) #산술평균
print(m[n//2]) #중앙값
#최빈값
dic = dict()
for i in m: #빈도수 구하기
if i in dic:
dic[i] += 1
else:
dic[i] = 1
mx = max(dic.values()) #빈도수 중 최대값
mxdic = [] #최빈값 숫자를 저장할 배열
for i in dic:
if mx == dic[i]: #최빈값의 key저장
mxdic.append(i)
if len(mxdic) > 1: #최반값 여러개면,
print(mxdic[1]) #두번째로 작은 값
else: #하나라면,
print(mxdic[0]) #해당 값 출력
print(max(m)-min(m))
# 5. 20920 영단어 암기는 괴로워
'''Counter.most_common() : 등장횟수 내림차순 정렬'''
from collections import Counter
n, m = map(int, input().split()) #n,m = 단어개수,기준이상출력
arr = []
for i in range(1, n+1):
wd = input()
if len(wd) >= m:
arr.append(wd)
c = Counter(arr)
#for i,j in c.most_common():print(i) #단어길이 긴게 먼저 출력 안되네
d = sorted(c.most_common(), key=lambda x : len(x[0]), reverse=True)
print(d) #이러면 등장횟수 내림차순 정렬이 안되고반응형
'PS > BOJ : 단계별로 풀어보기' 카테고리의 다른 글
| 백준 [단계별로 풀어보기]: Gold 5 달성! (1) | 2024.10.10 |
|---|---|
| 백준 [단계별로 풀어보기]: 쉬어가기 (2) | 2024.09.14 |
| 백준 [단계별로 풀어보기]: (19단계) "조합론", python (5) | 2024.09.09 |
| 백준 [단계별로 풀어보기]: (17,18단계) "절취선, 스택 단계와 합침", python (2) | 2024.09.07 |
| 백준 [단계별로 풀어보기]: (16단계) "스택, 큐, 덱", python (5) | 2024.09.06 |