728x90

Baekjoon Case 69

[파이썬 / 백준 1212번] 8진수 2진수

8진수로 입력 받는 방법을 몰라서, 처음에는 문자열로 받고 하나씩 8의 제곱을 늘려 더하는 방법으로 했더니 시간초과가 났다. 그래서 검색해 보니 아주 좋은 방법이 있었음. 대부분 입력 받는 값이 아니라 정수에서 2진수, 8진수, 16진수로 변환하는 방법이라 없는 줄 알았는데 아니었다. A=int('0b'+input(),2) #2진수 입력값을 정수로 변환하여 받음 A=int('0o'+input(),8) #8진수 입력값을 정수로 변환하여 받음 A=int('0x'+input(),16) #16진수 입력값을 정수로 변환하여 받음 그리고 정수로 받은 값을 출력하고 싶은 값으로 변환하면 되는데, 무조건 문자열로 출력된다. 출력 해 보면 앞 두자리는 진수를 나타내기때문에, 문자열[2:]로 출력해야 된다. A=int('..

Baekjoon Case 2021.11.02

[파이썬 / 백준 10160번] 30

진짜 한 일주일동안 풀었던 것 같다. 처음에는 엄청 쉽다고 생각했는데 알고보니 생각을 잘 못 하고 있었다. 처음에는 1. 0이 없으면 -1 2. 2자리수면 3으로 나누어지는지 3. 3자리수 이상이면 0을 빼고 나머지 숫자 2개를 조합해서 끝 두 자리가 3으로 나뉘어지는지 로 기준을 나누어서 코딩을 짰는데, 시간초과, 출력초과 기타등등.. 디버깅 해 보니까 전혀 안맞음 이유는 전혀 모르겠지만 처음에 3번에 너무 꽂혀있어서 만들 수 있는 두 자리 조합중 가장 작으면서 큰(??) 수를 빼고,, 나머지 숫자로 큰 수를 조합해서 출력하는것으로 했다.. 동적계획법때문에 계속 작은 부분으로 먼가 해결하려고 한듯.. 왜 인지 모르겠는데 끝 두 자리 수가 3으로 나누어지면 3의 배수라고 생각했던 것 같다... 알고보니 ..

Baekjoon Case 2021.10.28

[파이썬 / 백준 1629번] 곱셈

엄청 단순 해 보이는데 계속 시간 초과가 나서 고생했다. 결국 검색해서 알게 되었는데 알고 나니 허무.. 거듭제곱의 속성을 사용하여 풀면 되는것이었다. 예를들어 10^28 을 구하려면, 10을 28번 곱해야 하기 때문에 연산속도가 엄청나게 늘어나게된다. 하지만 10^28은 (10^14)^2와 같기때문에 이런 논리로 구하면 연산이 확실히 줄어들게된다. 10^28 =(10^14)^2 =((10^7)^2)^2 =(((10^3)^2*10)^2)^2 =((((10^2)*10)^2*10)^2)^2 이런식으로 제곱수를 먼저 구하여서 연산하면 속도가 매우매우 빠루다. def power(A,B): if B%2>0: return power(A,B-1)*A elif B==0: return 1 elif B==1: return..

Baekjoon Case 2021.10.21

[파이썬 / 백준 1476번] 날짜 계산

문제를 풀다가 좀 재밌게 푼 것 같아서 업로드한다. 처음에는 동작 원리 자체를 이해 못해서 그냥 S가 가장 크면 S를 출력하게 했는데, 다시 읽어보니 각각 15, 28, 19로 나눠서 나온 나머지가 일치하는 수를 찾는것이었다. 그래서 제일 큰수인 28에 0부터 차례대로 곱해서 S를 더한 값을 15와 19로 나눠서 나머지가 각각 E, M과 일치한 값을 찾도록 코드를 짰는데 값이 틀렸다. 다시 생각 해 보니 만약 15와 19로 나누어지면 나머지가 0이라 값이 달라진다. 그래서 나머지가 0일 경우에는 각각 15와 19로 값이 변하게끔 코딩을 짰더니 성공! E,S,M=map(int,input().split()) i=0 while True: a=28*i+S b=a%19 c=a%15 if b==0: b=19 if ..

Baekjoon Case 2021.10.16

[파이썬 / 백준 1934번] 최소공배수(유클리드 호제법)

동적계획법을 하다가 너무 막혀서 일단 백준 문제중에 쉬워보이는것 위주로..먼저 풀어보기 기초 알고리즘을 좀 익혀야 심화 문제를 풀 수 있을 것 같아서..(당연) 어쨌든 처음에는 그냥 큰 수의 배수를 하나씩 구하면서 작은 수로 나눠지면 출력되게 했는데 시간이 계속 초과되어서 찾아보니 유클리드 호제법이라는게 있었다. 유클리드 호제법 : 큰 수를 작은수로 나누어 나온 나머지로 작은 수가 나누어지면 최대공약수를 구할 수 있다. ex) 45와 27의 최대공약수를 구해야 하는 경우 1) 45%27=18 (공약수가 아님) 2) 27%18=9(공약수가 아님 ) 3)18%9=0(공약수는 9) def ul(a,b): while True: r=a%b if r==0: return b break else: a,b=b,r T=i..

Baekjoon Case 2021.10.15
728x90