일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- MySQL
- K-MOOC
- 데이터분석전문가가이드
- 백준
- 데이터분석전문가
- 당신이 몰랐던 진화론
- 공부정리
- 미분적분학
- 알고리즘
- 코테
- Udemy
- 빅데이터
- Progate
- python
- 자료구조
- 후기
- 조지프 나이
- KMOOC
- Great Minds
- 정치학
- ADP
- 맛집
- Baekjoon
- ADsP
- 위대한 수업
- EBS
- Hacker Rank
- 누가 진정한 리더인가
- CNN10
- Joseph Samuel Nye Jr.
Archives
- Today
- Total
ㅇ
[BAEKJOON] 8단계_일반 수학1 본문
julia319 정보
시도했지만 맞지 못한 문제
www.acmicpc.net
2745번 진법 변환
파이썬 내장 함수 중 int(num, base)를 활용하면 문자건 숫자건 base에 진법을 넣으면 10진수로 변환해준다. 이때 base에는 0, 2~36까지 입력할 수 있다.
N, B = input().split()
B = int(B)
# int 함수의 두 번째 인자는 첫 번재 인자가 어떤 진법인지 표시하는데 사용된다.
N = int(N, B)
print(N)
- int 함수를 사용하지 않는 방법
문자열의 진법값울 자릿수로 거듭제곱하고, 그 자리에 있던 값을 곱한 것을 더하는 방법으로 숫자를 구한다.
N, B = input().split()
B = int(B)
ans = 0
# 문자열은 1의 자리부터 역순으로 하나씩 늘어가고
# enmuerate를 활용해 갯수를 0부터 하나씩 늘어간다.
for num, i in enumerate(N[::-1]):
# 주어진 진법에 문자열의 갯수 0부터 끝까지 거듭 제곱해준다.
dem = B ** num
# 만약 문자가 알파벳이라면 유니코드값에서 55를 뺀 값을 활용한다.
if i.isalpha():
n = ord(i) - 55
# 만약 숫자라면 int로 변환
else:
n = int(i)
# 진법과 자릿수를 고려한 dem에 그 자리에 위치한 숫자값을 곱한 것을 전체 숫자 값에 더해준다.
ans += dem * n
print(ans)
11005번 진법 변환 2
9보다 큰 수의 경우 문자로 표현하기 위해 chr() 함수를 활용했다. 진법으로 나눈 나머지에 55를 더해야 문자 A~Z를 활용할 수 있다. 결과값의 뒷자리부터 계산하고 있으므로 이어붙일 때 자리를 주의해야 한다. 계산할 값을 진법으로 나눈 것의 몫으로 갱신한다.
N, B = map(int, input().split())
ans = ''
# 계속 나눌 변수, 초기값은 주어진 입력값 N
tmp = N
while(True):
tmpMod = tmp % B
# 9보다 큰 나머지는 문자로 표현해야한다
if tmpMod > 9:
# 10일 경우 A가 나와야 하므로 나오는 숫자에 +55를 한다.
tmpMod = chr(tmpMod + 55)
else:
# 일반 숫자일 경우 문자로 변환한다.
tmpMod = str(tmpMod)
# 일의 자리부터 계산되므로 새로 계산한 것을 원래 것에 앞으로 이어붙인다.
ans = tmpMod + ans
# 만약 계산하는 것의 몫이 0이 된다면 전체 계산이 끝났으므로 break
if tmp // B == 0:
break;
# 다음 계산할 것을 tmp를 주어진 진법으로 나눈 몫으로 갱신한다.
tmp = (tmp // B)
print(ans)
2720번 세탁소 사장 동혁
나누기의 몫과 나머지를 잘 활용하면 쉽게 해결할 수 있다.
T = int(input())
# cent 단위로 입력되므로 동전의 단위도 동일하게 변경한다.
# 입력된 순서는 Q, D, N, P 순서다.
Unit = [25, 10, 5, 1]
for _ in range(T):
# 거슬러줄 동전의 종류가 Q, D, N, P 순서로 입력된다.
Coin = []
change = int(input())
# 동전 단위만큼 반복한다.
for u in Unit:
# 동전 단위만큼 나눈 것의 몫이 거슬러줄 동전의 가장 큰 단위
Coin.append(change // u)
# 앞의 동전을 뺀 만큼인, 나머지를 다시 계산할 change에 배정한다.
change %= u
for c in Coin:
print(c, end = ' ')
print()
2903번 중앙 이동 알고리즘
점의 숫자를 세로로 세보면, 2의 제곱, 3의 제곱, 5의 제곱, 9의 제곱의 형태다. 정사각형이므로 제곱으로 나올 뿐이고, 일반적인 계차수열이다.
N = int(input())
# 점의 갯수가 초기 4, 이후 9, 25, 81, ... 로 계차수열의 제곱 형태를 띄고 있다
# (a + sigma(b)from 0 to n-1) ** 2
# a = 2
# dot_1 = (a + (2 ** 0)) ** 2
# dot_1 = (a + (2 ** 1 + 2 ** 0)) ** 2
# dot_N = (a + (2 ** (n-1) + 2 ** (n-2) + ... + 2 ** 1 + 2 ** 0)) **2
a = 2
b = 0
for n in range(N):
b += 2 ** n
ans = (a + b) ** 2
print(ans)
2292번 벌집
지나가는 방의 갯수와 레벨의 변화가 동일하다는 것을 이해해야 한다. 그 수가 어느 레벨에 있는가가 지나간 방의 수와 동일하다.
N = int(input())
# 방을 지나칠 때마다 레벨이 하나씩 오르기 때문에
# 어떤 레벨에 있는가가 지나가는 방의 갯수와 동일하다
# 현재 레벨, 초기값은 1
level = 1
# 레벨 별 방의 최대 수, 초기값 1
HiveNum = 1
while(True):
# 만약 입력값이 현재 레벨의 방 최대 수보다 작거나 같다면
# 루프를 종료한다.
if N <= HiveNum:
break;
# 레벨이 오를 때 마다 더해지는 방의 수가 6의 배수이다.
# 1 + 6) +12) +18) +24) ...
HiveNum += 6 * level
# 레벨을 하나 올린다.
level += 1
print(level)
1193번 분수찾기
층별로 층만큼의 칸이 존재한다. 1층에는 1칸, 2층에는 2칸 등이므로, 입력값이 몇 층에 있는지 확인하고, 그 층의 첫 번째 칸과 입력값 차이만큼 이동하면 된다. 이때 층이 짝수면 분모는 그 층의 값에서 감소하는 형태고, 분자는 1에서 증가하는 형태다. 따라서 그 차이만큼을 더하고 빼주면 된다.
X = int(input())
# 층, 층과 층에 존재하는 칸의 수가 같다.
level = 1
# 층의 첫 번째 칸
levelStart = 1
while(True):
# 만약 층과 층의 첫 번째 칸을 더한 것이 입력값보다 크다면 break
if (level + levelStart) > X:
break
# 현재 층의 첫 번째 칸을 다음 층의 첫 번째 칸으로 변경
levelStart += level
# 현재 층을 바꿈
level += 1
# 현재 층에서 입력값까지 움직여야하는 정도
diff = X - levelStart
# 만약 층이 짝수라면 분모를 큰 수부터 진행한다.
# 홀수라면 자리를 바꾼다.
if level % 2 == 0:
# 현재 층에서 차이만큼 이동
den = level - diff
# 분모 값과 분자 값을 더하면 층 값에 1을 더한 값.
num = 1 + diff
else:
num = level - diff
den = 1 + diff
print('{}/{}'.format(num, den))
2869번 달팽이는 올라가고 싶다
시간제한이 있을 때는 반복문을 곱하기와 나누기가 들어간 변수 선언으로 바꾸면 된다.
import math
A, B, V = map(int, input().split())
# remainders = V
# day = 1
# while(True):
# remainders -= A
# if remainders <= 0:
# break;
# remainders += B
# day += 1
# V - day * A + (day - 1) * B <= 0
# 날짜란 소수점이 없으므로, 소수점 존재시 무조건 올림처리
day = math.ceil((V - B) / (A - B))
print(day)
반응형
'IT > 코테문제' 카테고리의 다른 글
[BAEKJOON] 10단계_기하: 직사각형과 삼각형 (0) | 2023.10.31 |
---|---|
[BAEKJOON] 9단계_약수, 배수와 소수 (0) | 2023.10.30 |
[BAEKJOON] 7단계_ 2차원 배열 (1) | 2023.10.26 |
[Python] 문제 풀 때 요령_231014 (0) | 2023.10.25 |
[BAEKJOON] 6단계_심화1 (1) | 2023.10.24 |
Comments