본문 바로가기

전체글61

이진 변환 반복하기 [문제 설명] 입력으로 들어온 2진수의 0의 갯수를 세고 1로만 이루어진 문자열로 바꿔준 후, 1로 이루어진 문자열의 길이로 다시 2진수로 만들면서 반복되는 문제이다. 결과값으로는 몇회 반복하여 이진 변환을 하였는지, 또 반복하면서 0의 갯수가 몇개였는지 출력하면 해결이다. [코드] def solution(s): answer = []; count = 0; zcount = 0 while s != '1': count += 1 zcount += s.count('0') s = bin(s.count('1'))[2:] answer.append(count); answer.append(zcount) return answer [코드 설명] 본인은 먼저 최종 조건인 s가 '1'의 값이 될 때 까지 while문을 돌도록 하.. 2021. 10. 26.
1309번 동물원 문제풀이 동적 프로그래밍의 문제들을 풀어보면서 동적 프로그래밍 문제들은 어느 조건들을 만족하면 답을 도출하기 쉽다는 것을 알았다. 이문제에서도 한가지 조건이 있었다. N = 1 : 1 1개 N = 2 : 00 11 2개 N = 3 : 001 100 111 3개 N = 4: 0011 0000 1001 1100 1111 5개 인 것처럼 여기서 지금 값의 개수는 이전 값, 이전 값의 이전 값을 더하면 지금 값의 개수를 얻을 수 있다. 그리고 결과값으로 15746을 나누고 남은 나머지 값을 출력해야 한다. 그러나 최종값에서만 모듈러 연산을 해주게 되면 100만번까지 도는 코드에서 메모리 초과가 나기때문에 for문을 돌때 마다 15746을 나눈 나머지 값만 저장해서 최종값을 도출 한다. import sys N =.. 2021. 8. 27.
16568번 엔비스카의 영혼 문제풀이 기본적인 동적 프로그래밍 문제들과 크게 다르지 않다. 이 문제 또한 여러 조건들을 가지고 진행되게 되는데, 기다리기 a명 앞으로 가기 (앞에 최소 a명 있을 때) b명 앞으로 가기 (앞에 최소 b명 있을 때 이 3가지 조건들을 충족하면서 계산을 진행해야한다. 예를 들어서 N으로 값이 4가 들어오고 a와 b의 값이 1과 2라고 하면, for문으로 진행될때 i == 1일 경우에는 i에 a와 b의 값을 빼서 넘어 갈 수 없기 때문에 둘다 되는 경우가 없다. i == 2일 경우 i에 a와 b 값중 a의 값이 i-a-1의 식을 진행하여도 값이 0 이거나 이상의 값을 가지기 때문에 최소 시간으로 저장됨 i == 3일 경우 i에 a와 b의 값중 a도 조건이 가능해서 계산이 가능하지만 이왕이면 더 큰값으로 먼.. 2021. 8. 27.
2193번 이친수 문제풀이 이 문제에는 2가지 조건을 만족해야한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다 N이 6이라고 가정하자. 그렇다면 N = 1 : 1 (1가지) N = 2: 10 (1가지) N = 3: 100 101 (2가지) N = 4: 1000 1001 1010 (3가지) N = 5: 10000 10001 10010 10100 10101 (5가지) N = 6: 100000 100001 100010 100100 100101 101000 101001 101010 (8가지) 값을 얻을 수 있다. 여기서 한가지 규칙을 찾을 수 있다. for문을 돌 경우 i 번째의 값들은 i-1, i-2번째의 값들을 더한 값과 같다. 그렇기 때문에 .. 2021. 8. 27.
반응형