전체 글
-
[백준 파이썬 2908번]상수★2중리스트화 주목하기★슬라이싱★VER2.02022.09.15
-
[백준 파이썬 5622번]다이얼★2중리스트화,IN 주목하기★VER2.0★2022.09.15
-
[Python][백준] 1065번: 한수2022.09.14
-
[Python] 백준 15596번 정수 N개의합2022.09.14
[백준 파이썬 1193번]분수찾기 ★계수함수 & 대각선의 길이에 따른 분수의 규칙 이해하기★함수활용★VER2.0
VERSION 2.0
import sys
import math
A = int(sys.stdin.readline())
def func(k):
a = (pow(k,2) - k + 2)//2
return a
k=1
while True:
if func(k) <= A < func(k+1):
break
else:
k+=1
if k% 2 == 1:
bun_za = func(k) - A +k
bun_mo = A-func(k)+1
else:
bun_za = A -func(k) +1
bun_mo = func(k) - A + k
print( '{}/{}'.format(bun_za,bun_mo))
VERSION 1.0
import sys
X = int(sys.stdin.readline())
#1/1 ==> 1번째
#1/2 2/1 ==> 2 3 번째 ==>오른쪽위에서 왼쪽아래로
#3/1 2/2 1/3 ==>4 5 6 번째==>왼쪽아래에서 오른쪽 위로
#1/4 2/3 3/2 4/1 ==> 7 8 9 10번째==>오른쪽위에서 왼쪽아래로
#5/1 4/2 3/3 2/4 1/5 ==> 11 12 13 14 15번째==>왼쪽아래에서 오른쪽위로
#1/6 2/5 3/4 4/3 5/2 6/1 ==> 16 17 18 19 20 21
#i=0
# a[0]==> [i+1/i+1]
#i=1
#a[1] ==> [i/i+1] [i+1/i]
k=1
A,B =[] , []
def func(n):
range1 = int((n*(n-1)//2)+1) #계차수열 1 2 4 7
return range1
while True:
if func(k)<=X<func(k+1):
#ex> k=1 X=14 ==> func(1) = 1
#k=2 ==>func(2) =2
#k=3 ==>func(3) = 4
#k=4 ==>func(4) = 7
#k=5 ==>func(5) = 11 <= X <func(6)=16
print('인덱스{}는 {}번째 대각선 라인에 존재'.format(X,k))
#X는 5번째 대각선 라인에 존재
a,b=0,0
for i in range(func(k),func(k+1)):
#range(11,16) ==> 11~15
a+=1
if i == X: #11==14(?) a=1 X 12==14(?) a=2 X 13==14(?) a=3 X 14==14 a=4 O
print("{}번째에 존재합니다.".format(a)) #4번째에 존재합니다.
b =a
A.append(i) #[11,12,13,14]
else:#11!=14 12!=14 13!=14
A.append(i) #[11] ==> [11,12] ==>[11,12,13]
continue
break
else:
k+=1
print(A)
print(b)
if len(A)%2 == 1:
print("{}/{}".format(len(A)-b+1,b))
else:
print("{}/{}".format(b,len(A)-b+1))
★★★KEY POINT★★★
1. 인덱스의 위치 파악하는것이 중요!!
#1/1 ==> 1번째(인덱스)
#1/2 2/1 ==> 2 3 번째 ==>오른쪽위에서 왼쪽아래로
#3/1 2/2 1/3 ==>4 5 6 번째==>왼쪽아래에서 오른쪽 위로
#1/4 2/3 3/2 4/1 ==> 7 8 9 10번째==>오른쪽위에서 왼쪽아래로
#5/1 4/2 3/3 2/4 1/5 ==> 11 12 13 14 15번째==>왼쪽아래에서 오른쪽위로
#1/6 2/5 3/4 4/3 5/2 6/1 ==> 16 17 18 19 20 21
==> 여기서 알 수 있는점!!!! : 각 대각선마다 인덱스는 하나씩 늘어나는것을 알 수 있다.
대각선으로 하나의 리스트라고 생각하자!
2. 계수함수 잘 기억해두기
16번째줄~~~: func(k) 선언 : int(n*(n-1)/2 +1) 의 계차수열로서 return 값을 부여하는 함수를 정의한다.
while True:
if func(k)<=X<func(k+1):
#ex> k=1 이고, X=14 일때 ==> func(1) = 1 <= X <2 이므로 다음 ELSE문으로 넘어감(k+=1)
#k=2 ==>func(2) = 2 <= X <4 이므로 다음 ELSE문으로 넘어감(k+=1)
#k=3 ==>func(3) = 4 <= X <7 이므로 다음 ELSE문으로 넘어감(k+=1)
#k=4 ==>func(4) = 7 <= X <11 이므로 다음 ELSE문으로 넘어감(k+=1)
#k=5 ==>func(5) = 11 <= X <func(6)=16 이므로 if문 실행 하게 된다!!
print('인덱스{}는 {}번째 대각선 라인에 존재'.format(X,k))
#X는 5번째 대각선 라인에 존재
else:
k+=1
28번째 줄~~~:
위의 print문 실행되고 난뒤,
a,b=0,0
for i in range(func(k),func(k+1)):
#range(11,16) ==> 11~15
a+=1 ==> a는 대각선의 몇번째에 위치해 있는지 알려준다. 인덱스와 1씩 차이난다.
if i == X: #11==14(?) a=1 X 12==14(?) a=2 X 13==14(?) a=3 X 14==14 a=4 O
print("{}번째에 존재합니다.".format(a)) #4번째에 존재합니다.
b =a ==>b는 X의 위치가 대각선의 어디에 있는지를 저장한다.
A.append(i) #[11,12,13,14]
else:#11!=14 12!=14 13!=14
A.append(i) #[11] ==> [11,12] ==>[11,12,13]
continue
3. 분수 규칙 이해해보기
분수의 규칙:
대각선의 순서가 홀수 일때:
분모가 내가 찾은 분수가 있는 대각선의 길이에서 점차 줄어들고
분자는 1에서부터 커진다는 것을 알 수있다.
대각선의 순서가 짝수일때:
분모는 1에서부터 커지고,
분자는 내가 찾은 분수가 있는 대각선의 길이에서 점차 줄어든다
if len(A)%2 == 1: ==> X가 14일때 A의 길이는 5 5%2 == 1 A =[11,12,13,14,15]
print("{}/{}".format(len(A)-b+1,b)) ==>b = 4 , 5-4+1 ==> 2/4
else: ==> X가 16일때 A의 길이는 6 6%2 == 0 A =[16,17,18,19,20,21]
print("{}/{}".format(b,len(A)-b+1)) ==>b = 1 , 6-1+1 ==> 1/6
'Python(백준) > 기본 수학 1' 카테고리의 다른 글
[백준 파이썬 2839번]설탕배달★if문 활용 ★VER2.0 (1) | 2022.09.16 |
---|---|
[백준 파이썬 10250번]ACM호텔★올림함수를 이용하여 규칙 차근차근 분석해보기★ (1) | 2022.09.16 |
[백준 파이썬 2869번]달팽이는 올라가고 싶다 ★올림함수를 활용하고 알고리즘 차근차근 분석하기★등차수열과 범위확인★VER2.0 (0) | 2022.09.16 |
[백준 파이썬 1712번]손익분기점★손익분기 잘 이해하기★손익못넘기는거 먼저 파악★VER2.0 (0) | 2022.09.15 |
[백준 파이썬 2292번]벌집 ★rfind() , find()함수 활용하기★ (0) | 2021.08.04 |
[백준 파이썬 1712번]손익분기점★손익분기 잘 이해하기★손익못넘기는거 먼저 파악★VER2.0
VERSION 2.0
import sys
T = list(map(int, sys.stdin.readline().rstrip().split()))
A = T[0]
B = T[1]
C = T[2]
if B>=C:
print("-1")
else:
notebook_gaet = A//(C-B)
#print("notebook_gaet : " , notebook_gaet)
if notebook_gaet * (C-B) <= A :
notebook_gaet+=1
print(notebook_gaet)
VERSION 1.0
import sys
A = list(map(int,sys.stdin.readline().split()))
#A[0] : 고정비용 A[1] : 가변비용 A[2]: 노트북 가격
if A[1]>=A[2]: #가변비용> 노트북 가격이라면 손익분기점 넘을수 없다.
print('-1')
else:
mid = A[2] - A[1] #노트북 한대 생산하는데의 이익
total = (A[0]//mid) +1
#고정비용에서 한대 생산하는데의 이익을 나누면 ==> 생산해야할 대수 구할 수 있다.
#생산 대수의 +1을 해야 이득을 볼 수 있다.
#1000 70 170 ==> 1000 //(170-70) => 10대 +1대여야 손익분기점 넘는다.
print(total)
★★★KEY POINT★★★
손익분기점 대수를 구하려면 고정비용에서 이득보고 있는 금액을 나눈 몫에서 1을 더하면 손익분기점을 넘는 대수를 구할 수 있다.
ex)20000 50 --> 400 +1 ==> 손익분기 댓수
'Python(백준) > 기본 수학 1' 카테고리의 다른 글
[백준 파이썬 2839번]설탕배달★if문 활용 ★VER2.0 (1) | 2022.09.16 |
---|---|
[백준 파이썬 10250번]ACM호텔★올림함수를 이용하여 규칙 차근차근 분석해보기★ (1) | 2022.09.16 |
[백준 파이썬 2869번]달팽이는 올라가고 싶다 ★올림함수를 활용하고 알고리즘 차근차근 분석하기★등차수열과 범위확인★VER2.0 (0) | 2022.09.16 |
[백준 파이썬 1193번]분수찾기 ★계수함수 & 대각선의 길이에 따른 분수의 규칙 이해하기★함수활용★VER2.0 (0) | 2022.09.16 |
[백준 파이썬 2292번]벌집 ★rfind() , find()함수 활용하기★ (0) | 2021.08.04 |
[백준 파이썬 11654번]아스키 코드 ★ord(),chr()함수 이해★VER2.0
ord() ===> 문자를 아스키코드로!!
chr() ===> 아스키코드를 문자로!!
ex>
ord('a') ==> 97
chr(97) == > a.
VERSION 2.0
import sys
A = (sys.stdin.readline().rstrip())
print(ord(A))
#ord() , chr() , hex()
ORD() 꼭 기억하자!!!
'Python(백준) > 문자열' 카테고리의 다른 글
★리스트 mapping★숫자의 합★rstrip()함수★VER3.0★[백준 파이썬 11720번] (0) | 2022.12.26 |
---|---|
★코테에서 꼭 쓰이는★ 헷갈리는 문자열 정리 (0) | 2022.09.28 |
[백준 파이썬 10809번]알파벳 찾기★rstrip(), index() 함수★VER2.0 (1) | 2022.09.15 |
[백준 파이썬 2908번]상수★2중리스트화 주목하기★슬라이싱★VER2.0 (0) | 2022.09.15 |
[백준 파이썬 5622번]다이얼★2중리스트화,IN 주목하기★VER2.0★ (0) | 2022.09.15 |
[백준 파이썬 10809번]알파벳 찾기★rstrip(), index() 함수★VER2.0
아스키코드 65번 : 대문자 'A'
아스키코드 90번 : 대문자 'Z'
아스키코드 97번: 소문자 'a'
아스키코드 122번 : 소문자 'z'
b의 객체에 입력값 받기(rstrip()함수를 통해 마지막 '\n' 삭제
c 객체에 b의 요소값 소문자로 받아오기
ex>
c= ['b','a','e','k','j','o','o' ,n']
13번째 줄 : range(97,123) ==> 변수 k에 97~122입력
14번째줄 : chr(k)를 통해 아스키코드를 문자열로 변환
ex>
k = ['a','b','c'~~'z']
15번째줄 : 14번째줄을 통해받은 k객체안의 문자열(a~z)가 c객체에 존재할 경우
★16번째줄 : c객체의 문자열의 index(k)를 받아와 출력시킨다. ==> k는 알파벳이다. 중복되는 값이 있다 하더라도
if문을 벗어나고 for문을 통해 다시 반복된다면 k값은 증가하기 때문에 다음기회는 없다.
즉, baekjoon --> a는 ==> 1번째 인덱스위치 b는 ==> 0번째 인덱스 위치
17번째줄 : k객체안의 문자열이 c객체에 존재하지 않을경우 -1로 출력
index()함수 기억하자!!
VERSION 2.0
import sys
A = list(map(str, sys.stdin.readline().rstrip()))
#print(ord('a'))
#print(ord('z'))
alphabet = []
for i in range(97,123):
alphabet.append(chr(i))
print(alphabet)
res = []
for i in alphabet:
if i in set(A):
idx = A.index(i)
res.append(idx)
else:
res.append(-1)
res2= ''
for i in res:
res2 += (str(i)+ " ")
print(res2)
index 함수는 중복 단어일지라도 처음나온거 반환해주는 함수이다.
'Python(백준) > 문자열' 카테고리의 다른 글
★리스트 mapping★숫자의 합★rstrip()함수★VER3.0★[백준 파이썬 11720번] (0) | 2022.12.26 |
---|---|
★코테에서 꼭 쓰이는★ 헷갈리는 문자열 정리 (0) | 2022.09.28 |
[백준 파이썬 11654번]아스키 코드 ★ord(),chr()함수 이해★VER2.0 (0) | 2022.09.15 |
[백준 파이썬 2908번]상수★2중리스트화 주목하기★슬라이싱★VER2.0 (0) | 2022.09.15 |
[백준 파이썬 5622번]다이얼★2중리스트화,IN 주목하기★VER2.0★ (0) | 2022.09.15 |
[백준 파이썬 2908번]상수★2중리스트화 주목하기★슬라이싱★VER2.0
import sys
A = list(map(str, sys.stdin.readline().rstrip().split())) #단어로(공백기준) 구분
B,C,D = [], [],[]
print(A)
for i in range(len(A)):
B.append(list(str(A[i]))) #B객체에 i번째에 있는 A의 요소를 string형태로 쪼개어서 리스트화 하여 B에 저장
#--> A = ['492' , '533'] ==> B = [['4', '9' , '2']] ==> [['4', '9' , '2'], ['5', '3' , '3']]
B[i].reverse() # B[0] ==> ['4','9','2'] ==> B[0].reverse() ==> ['2','9', '4']
C.append("".join(B[i])) #합쳐서 C리스트에 저장
print(int(max(C))) #C리스트의 요소중 최대값 출력
★★★KEY POINT★★★
8번째줄: B리스트의 2중 리스트화에 주목해야한다!!!!!!!!!!!!!!!
VERSION 2.0
import sys
A = list(map(str , sys.stdin.readline().rstrip().split()))
# print(A)
B = list(A[0])
C = list(A[1])
D = B[::-1]
E = C[::-1]
str ,str2= "" , ""
for i in D:
str+=i
for i in E:
str2+=i
print(max(str, str2))
# print(str)
슬라이싱으로 해보았다.
'Python(백준) > 문자열' 카테고리의 다른 글
★리스트 mapping★숫자의 합★rstrip()함수★VER3.0★[백준 파이썬 11720번] (0) | 2022.12.26 |
---|---|
★코테에서 꼭 쓰이는★ 헷갈리는 문자열 정리 (0) | 2022.09.28 |
[백준 파이썬 11654번]아스키 코드 ★ord(),chr()함수 이해★VER2.0 (0) | 2022.09.15 |
[백준 파이썬 10809번]알파벳 찾기★rstrip(), index() 함수★VER2.0 (1) | 2022.09.15 |
[백준 파이썬 5622번]다이얼★2중리스트화,IN 주목하기★VER2.0★ (0) | 2022.09.15 |
[백준 파이썬 5622번]다이얼★2중리스트화,IN 주목하기★VER2.0★
import sys
while True:
alpha = list(map(str,sys.stdin.readline().rstrip())) #alpha 객체에 단어를 string형태로 받아본다.
print('alpha : ', alpha)
#ABCDE 입력 ==> ['A','B','C','D','E']
alpha = sorted(alpha) #alpha의 요소들을 정렬
if len(alpha)<2 or len(alpha)>155:
print("알파벳의 길이는 2보다 크거나같고 15보다 작거나 같다.")
else:
break
long2 ,dials, four , five = [], [] , [] , []
for k in range(65,91): #아스키코드 65 : 'A' 아스키코드 91: 'Z'
long2.append(chr(k))
print('long2 : ', long2)
#long2 : ['A' , 'B' , 'C' ~~~~~~~ , 'Z']
q = 0
for j in range(5):
dials.append(long2[q:q+3]) #long에 저장되어있는 요소를 3개씩 저장시킨다.
#2번다이얼('A',B','C') ~ 6번다이얼
q+=3 #인덱스 3씩 증가
for w in range(1):
dials.append(long2[q:q+4])
q+=4 #7번다이얼('P','Q','R','S')
for l in range(1):
dials.append(long2[q:q+3])
q+=3
#8번다이얼('T','U','V')
for p in range(1):
dials.append(long2[q:q+4])
#9번다이얼('W','X','Y','Z')
print('dials : ', dials)
#2중 리스트
for i in range(len(dials)): #len(dials) = 8
sum = 0 #
for k in range(len(alpha)): #len(alpha) = 입력된 문자열들의 길이
if alpha[k] in dials[i]: #dials 리스트에 입력된 문자열의 문자가 있다면
sum += 1 #더해라
four.append(sum) #four리스트에 sum값들 저장해라
print('four : ' ,four)
sum2,f =0, 0
for e in range(len(four)): #len(four) = 8
sum2 += four[e]*(f+3) #문자열이 들어있는 개수 * (걸리는초)
f+=1
print(sum2)
alpha 리스트에는 입력한 문자열의 문자 하나하나를 string화 하여 저장
long2 리스트에는 chr()함수와 for문을 활용하여 알파벳들을 저장시켰다.
dials 리스트에는 for문의 4가지 경우를 만들어 long2리스트를 슬라이싱하여 dials안에 2중리스트가 되도록 한다.
four 리스트에는 입력한 문자열 리스트의 인덱스순서에 따라 문자가 dials 인덱스순서에 따른 리스트에 존재하면
sum2 변수에 문자열이 들어있는 개수 * (걸리는 초)
Version 2.0
import sys
A = list(str(sys.stdin.readline().rstrip()))
# print(ord('A'))
# print(ord('Z'))
alphabet_1= []
alphabet_2= []
dial , dial_2= [] , []
for i in range(65,80):
alphabet_1.append(chr(i))
for i in range(80,91):
alphabet_2.append(chr(i))
for i in range(5):
dial.append(alphabet_1[i*3:(i+1)*3])
for i in range(1):
dial.append(alphabet_2[i*4:(i+1)*4])
dial.append(alphabet_2[4:7])
dial.append(alphabet_2[7:11])
print("dial:" , dial)
res = 0
for j in range(len(A)):
for i in range(len(dial)):
if A[j] in dial[i] :
res+= (3+i)
break
print("res:" , res)
'Python(백준) > 문자열' 카테고리의 다른 글
★리스트 mapping★숫자의 합★rstrip()함수★VER3.0★[백준 파이썬 11720번] (0) | 2022.12.26 |
---|---|
★코테에서 꼭 쓰이는★ 헷갈리는 문자열 정리 (0) | 2022.09.28 |
[백준 파이썬 11654번]아스키 코드 ★ord(),chr()함수 이해★VER2.0 (0) | 2022.09.15 |
[백준 파이썬 10809번]알파벳 찾기★rstrip(), index() 함수★VER2.0 (1) | 2022.09.15 |
[백준 파이썬 2908번]상수★2중리스트화 주목하기★슬라이싱★VER2.0 (0) | 2022.09.15 |
[Python][백준] 1065번: 한수
import sys
N = int(sys.stdin.readline())
A =[]
res = 0
for i in range(1,N+1):
A.append(i)
for j in range(len(A)):
b= list(str(A[j]))
if len(b)>=3:
deung = []
b = list(map(int, b))
for k in range(len(b)-1):
deung.append(b[k] - b[k+1])
if len(set(deung))==1:
res+=1
else:
res+=1
print(res)
'Python(백준) > 함수' 카테고리의 다른 글
[Python] 백준 15596번 정수 N개의합 (0) | 2022.09.14 |
---|---|
[백준 파이썬 1065번]함수 활용한 '한수' ★등차수열의 이해★ (0) | 2021.07.31 |
[Python] 백준 15596번 정수 N개의합
def solve(a : list) -> int: #주석값이다. 화살표는 a:list 이것도 주석이다.
sum =0
for i in a:
sum+=i
return print(sum)
'Python(백준) > 함수' 카테고리의 다른 글
[Python][백준] 1065번: 한수 (0) | 2022.09.14 |
---|---|
[백준 파이썬 1065번]함수 활용한 '한수' ★등차수열의 이해★ (0) | 2021.07.31 |