🧧 설연휴에(맨날 놀긴 하지만) 클래스솔브드 도장깨기
목표는 클래스 2++ 달성!
7문제!
2231 분해합
브론즈 2
#브루트 포스 알고리즘
from sys import stdin
N = int(stdin.readline())
#자릿수에 따라서 생성자후보 최솟값 구하고 되는지 다 돌기
# 생성자 후보 최솟값은 원래수-(원래수의자릿수*9)로
#자릿수 구하기
M = N
length = 1
while(1):
if M/10 >= 1:
M /= 10
length += 1
else:
break
reresult = 0
for cha in range( N - (length * 9), N):
result = cha
K = cha
for j in range(length-1,-1,-1):
result += K //(10**j)
K -= (K //(10**j))*(10**j)
if (N == result):
reresult = cha
break
print(reresult)
브루트포스 알고리즘
자릿수 구하는 법 -> 10으로 언제까지 나누어지는지 확인
각 자릿수의 숫자 구하는 법 유의 -> 몫 활용! 그때그때 원래수에서 빼줘야함!
한방에성공!
뭐 브루트포스니깐.. 시간제한 2초~
근데.. 경험치 안오른다... 골드 레벨은 브론즈 2정도는 안 쳐준다는 건가..너무해..뿌듯했는데..
15829 Hashing
브론즈 2
해시 함수..아직 안 배웠는데
from sys import stdin
L = int(stdin.readline())
Llist = stdin.readline()[:-1]
# 음 아스키 코드 써볼까
# 고유번호 변환
Nlist = []
for cha in Llist:
Nlist.append(ord(cha)-96)
# 해시 함수 구현
result = 0
for i in range(L):
result+= Nlist[i]*((31)**i)
print(result)
stdin.readline() 문자열 받을 때는 \n 줄바꿈코드 항상 잊지말기! 슬라이싱
음 함수를 잘 몰라서 발생한 문제였다.
mod M이란 게 나누는 건 줄 알았는데 나머지를 구하라는 말이었군
[이상 시의 주기경계조건]이라는 논문 읽고 있는데 나왔다.
모듈러 연산이라고 하는 건데 주기경계조건과 연관지어 생각할 수 있다고 설명해줬다.
서브테스크 문제 -> 내 코드 보기에서 문제 뭘 틀렸는지 확인 가능!
성공%
1436 영화감독 숌
실버 5
예전에 수학적인 규칙을 이용해 보려다가 포기했었던 문제..
#브루트 포스 알고리즘
from sys import stdin
L = int(stdin.readline())
#666확인 함수
def sixsixsix(N):
length = lenlen(N)
sixnum = continuesix(N, length)
# 맞으면
if sixnum == 3:
return 1
else:
return 0
#자릿수 구하기 함수
def lenlen(N):
length = 1
while(1):
if N/10 >= 1:
N /= 10
length += 1
else:
return length
# 6연속 확인 함수
def continuesix(N, len):
sixNum = 0
for j in range(len-1,-1,-1):
if( N //(10**j)==6 ):
sixNum += 1
if sixNum == 3:
return sixNum
else:
sixNum = 0
N -= (N //(10**j))*(10**j)
return sixNum
N = 666 #첫 영화
Lright = 0
while(1):
#666 있는지 확인
rere = sixsixsix(N)
Lright += rere
if Lright == L:
print(N)
break
#다음숫자
N += 1
무지막지한 브루트다.
이번에는 무뇌로 +1씩 하면서 확인하는 알고리즘을 짰다.
파이썬 인터프리터에서 값 출력 눈에 보일 만큼 지연되는 건 오랜만이었다..
채점도 엄청 오래 걸렸는데
맞았다.
정말 이거였다니 믿기지 않는
7568 덩치
실버 5
from sys import stdin
N = int(stdin.readline())
Nlist = []
nlist =[1] * N
for _ in range(N):
A, B = map(int,stdin.readline().split())
Nlist.append([A, B])
for i in range(N):
for cha in Nlist:
if Nlist[i][0] > cha[0]:
if Nlist[i][1] > cha[1]:
nlist[i] += 1
print(i+1,Nlist[i] , cha)
for cha in nlist:
print(cha, end =" ")
한방성공
차 안에서 하는 건 쫌 멀미나는듯
1654 랜선 자르기
실버 2
오 이전에 질문받아봤던 문제다
이분탐색
from sys import stdin
K, N = map(int,stdin.readline().split())
Klist = []
for i in range(K):
Klist.append(int(stdin.readline()))
#잘릴 랜선의 길이 후보 범위
start = 1
end = max(Klist)
while(start <= end):
Nlen = 0
mid = (start + end) // 2 #이분탐색
for cha in Klist:
Nlen += cha // mid
if (Nlen >= N):
start = mid + 1
else:
end = mid - 1
print(end)
어렵..
이분탐색 공부해야 함
2805 나무 자르기
실버 2
from sys import stdin
K, N = map(int,stdin.readline().split())
Klist = list(map(int,stdin.readline().split()))
#잘릴 랜선의 길이 후보 범위
start = 1
end = max(Klist)
while(start <= end):
Nlen = 0
mid = (start + end) // 2 # 이분탐색
for cha in Klist:
if (cha > mid):
Nlen += (cha - mid)
if (Nlen >= N):
start = mid + 1
else:
end = mid - 1
print(end)
이분탐색 공부해야 함
18111 마인크래프트
실버 2
리스트 안에서 반복? 할 때 쓰레기값 들어갈 때가 있는데 [] 말고 list()로 하면 잘 된다. 왜지?
# 브루트 포스
from sys import stdin
N, M, B = map(int,stdin.readline().split()) # 세로 가로 인벤토리블록
land = [list(map(int,stdin.readline().split())) for _ in range(N)]
answer = 999999999
"""
#이게 오히려 시간 초과 유발 ㅜ
#가장 낮은 땅 높은땅 사이 땅 높이 모두 돌려보기
MostHigh = []
MostLow = []
for cha in land:
MostHigh.append(max(cha))
MostLow.append(min(cha))
Mosthigh = max(MostHigh)
Mostlow = max(MostLow)
"""
for height in range(Mostlow, Mosthigh+1):
max_target, min_target = 0, 0
for i in range(N):
for j in range(M):
if land[i][j] >= height:
max_target += land[i][j] - height
else:
min_target += height - land[i][j]
if max_target + B >= min_target:
if min_target + (max_target * 2) <= answer:
answer = min_target + (max_target * 2)
Height = height # 층수
print(answer, Height)
sys.maxsize
int 최댓값 반환
이전에 궁금해서 질문했던 문제 답변 도착
재귀함수를 쓸 때에는 return 필요 (재귀함수에서 최종 답이 나올 때)
return은 바로 전 함수에만 값 전달!!
🧧해피 설날🧧
저는 세뱃돈 받으러 숑숑
'📊 Algorithm > Algorithm plus+' 카테고리의 다른 글
🧚♂️ !기본편 끝! 🧚♂️ (4) | 2023.05.31 |
---|---|
🧚🏻♀️알고리즘 tip! 모으기🧚🏻♀️ (0) | 2023.05.20 |
🔰U-pper 이화여대 프로그래밍 대회- 한번에합격!🔰 (0) | 2023.02.06 |
💠SUAPC🎆 신촌지역 대학교 프로그래밍 대회 2023 winter (0) | 2023.02.05 |
🔮 백준 스트릭 잇기 🔮 (1) | 2022.12.27 |