Adventure Time - Jake '분류 전체보기' 카테고리의 글 목록 (12 Page)
본문 바로가기

전체보기93

[백준/python] 2745 진법변환: B진법->10진법 변환하기/ 문자열, reversed객체, join함수 https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net N, B= input().split() B=int(B) num='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' #Z:35 result=0 j=len(N)-1 for i in range(0,len(N)): result+=(B**j)* num.index(N[i]) j-=1 print(result) B진법 -> 10진법: 제곱승씩 곱해서. 110 -> B의 1승*1 + B의 2승*1.. 2023. 10. 25.
[백준/python] 2903 중앙 이동 알고리즘: 수학적인 사고를 해보장.. n=int(input()) print((2**n+1)**2) n=0이면 2*2 n=1이면 3*3 n=2이면 5*5 n=3이면 9*9 n=4이면 17*17 ... 이런식으로 몇개의 결과를 나열해놓은 다음 규칙을 찾으려고 했다. 그러다보니 3->5는 2가 커지고, 5->9는 4가 커지고, 9->17은 8이 커지는 걸 볼 수가 있었다. 그래서 2*n ... 와 같은 형태이거나 2^n...과 같은 형태일거라고 짐작했고 2*n...은 안되는 것을 확인한 후에 (2^n +1 )가 되는 것을 확인할 수 있었다. 출력은 모든 점의 개수를 출력해야하기 때문에 가로, 세로 각 각의 점 개수를 곱해줘야 하므로 두번 곱한 (2^n+1)^2를 출력으로 해주었다. 2023. 10. 25.
[백준/python] 2720 세탁소 사장 동혁: 거스름돈 계산 -> 그리디 알고리즘이 왜 가능할까? import sys n=int(input()) arr=[25, 10, 5, 1] result=[0]*4 for i in range(n): j=0 c=int(sys.stdin.readline()) while(j!=len(arr)): result[j]= c//arr[j] c=c%arr[j] print(result[j],end=' ') j+=1 print() 궁금한 점 1: 1과 5는 배수가 되는데 10은 25의 배수가 될 수 없다. 그런데도 큰 단위 화폐부터 돈을 거슬러주는 그리디 알고리즘이 통하네?? 500원, 100원, 50원, 10원 동전으로 생각해보자. 이들은 모두 작은 단위의 화폐를 종합해 큰 단위의 화폐를 만들 수 있다. 즉, 서로 배수 형태라는 말이다. 거스름돈 문제를 그리디 알고리즘으로 해결할.. 2023. 10. 25.
[백준/python] 11653 소인수분해: 소인수분해가 끝날 조건을 생각해보자 https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net n= int(input()) r1=n r2=1 i=2 while(1): if n%i==0: n=n//i print(i) r2*=i else: i+=1 if r1==r2: break 성공! 2로 계속 나눠 본다 -> 2로 안 나눠떨어지면 1을 더해서 3으로 나눠본다 -> 3으로 안 나눠떨어지면 1을 더해서 4로 나눠본다 -> ... 이때 나눈 값들은 r2라는 변수에 곱해서 저장해준다. 이 r2가 처음에 입력한 수(n=r1)와 같게되면 while문을 break해준다. 이 방법은 for i in range(2, n): 과.. 2023. 10. 25.
[백준/python] 2580 소수: 1트 코드 왜 틀렸었던걸까 import sys N=int(sys.stdin.readline()) M=int(sys.stdin.readline()) arr=[] for i in range(N,M+1): if i==1: break elif i==2: arr.append(i) for j in range(2,i): if i%j==0: break if j==i-1: arr.append(i) if len(arr)==0: print('-1') else: print(sum(arr)) print(min(arr)) 1트 근데 틀렸다고 나옴 뭐지 replit에서 실행해보면 맞게 나오는데 시간복잡도가 큰가? 그 경우는 런타임 오류로 나오는 줄 알았는데.. 흠 import sys N=int(sys.stdin.readline()) M=int(sys.std.. 2023. 10. 25.
[백준/python] 1978 소수찾기: import sys arr=[] n=int(sys.stdin.readline()) arr=list(map(int, sys.stdin.readline().split())) cnt=0 for i in arr: if i==1: #1은 소수가 아님 continue elif i==2: #2는 소수임 cnt+=1 else: for j in range(2,i): if i%j==0: #딱 나눠떨어지는 수가 하나라도 있으면 소수가 아님 break if j==i-1: #for-loop를 다 도는동안 딱 나눠떨어지는 수가 없었다면(즉, 약수가 없다) 소수임 cnt+=1 print(cnt) #소수 개수 출력 처음에 작성한 코드이다. 그런데 i의 모든 약수는 i/2보다 작다. 고로 2부터 i-1까지 확인할 필요가 없다는 뜻. .. 2023. 10. 25.