Adventure Time - Jake bogyoi's Dev note
본문 바로가기

전체 글94

[백준/python] 11005 진법 변환 2: 문자열 결합에서의 +연산 N, B= map(int, input().split()) num='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' #Z:35 result='' #문자열로 저장할거임 while (N>=1): result+=num[N%B] N=N//B print(result[::-1]) #문자열을 역순으로 출력 나머지 (%) 넣는데, N=1일때 마지막으로 나머지 계산해서 넣고 끝. 출력할땐 역순으로 출력 이라는 아이디어를 가지고 코드를 작성했다. N=0이 되면 더이상 나머지를 집어넣지않음! 따라서 위와 같이 while(N>=1)이 아니라 while(N)이라는 조건문으로 설정해도 됨. 2023. 10. 25.
[백준/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.