목록분류 전체보기 (49)
언젠가는

우선, 대각선으로만 뜯을 수 있다는 사실을 알 수 있다. 그런데, 연속해서 대각선으로 안뜯고 넘길 수도 있다. 그래서 두번 째 전의 것도 비교해서 더 큰 것을 더해가면 된다. 1. 처음 입력받는 것은 테스트 케이스 개수이다. 개수만 큼 for문을 돌려줄 것이다. a = int(input()) 2. b에는 2n개 스티커의 n이 들어간다. c=[0,0]를 미리 만들어서 리스트 맵으로 입력값을 받는다. for i in range(a): b = int(input()) c = [0,0] c[0] = list(map(int,input().split())) c[1] = list(map(int,input().split())) 3. 1부터 b-1만큼 돌 것이다. 인덱스는 0부터 시작하고, 우리는 이전의 값을 더해줄 것이..

자신 다음의 수가 자신보다 크거나 같기만 하면 오르막 수가 된다. n=1일 때 0부터 9까지 각 1개씩 경우가 생긴다. n=2일 때 전 값이 0이라면 0~9(10개), 1이면 1~9(9개), 2면 2~9(8개), ...... , 9이면 9(1개)라는 것을 알 수 있다. 1. 변수 a에 n값을 입력받는다. a = int(input()) 2. b에 0부터 9까지의 경우의 수를 넣어 줄 a개수 만큼 생성한다. b = [[0]*10 for i in range(a+1)] 3. a=1일 때 각 값은 1개씩이므로 집어넣어 준다. b[1] = [1]*10 4. a=2일 때부터 돌아준다. 위에서 그 전 값의 합계라는 것을 알아냈다. for i in range(2,a+1): for j in range(0,10): b[i]..

동물원에 사자는 그래서 몇 마리 있는데요? 하고 물어보고 싶다. 우리만 놓고 몇 마리인지는 관계없이 생각해야 한다. 가로로도 같이 있으면 안되고, 세로로도 같이 있으면 안된다. n=1일 때, 왼, 오, 비어두기 세 가지가 있다. 왼=0, 오=1, 비어두기=2 라고 생각하고 풀 것이다. 이전 값이 0(왼)이면 다음 값은 0(왼)에 올 수 없다. 1(오)아니면 2(비어두기)만 올 수 있다. 이전 값이 1(오)일 경우에는 0(왼), 2(비어두기) 이전 값이 2(비어두기)라면 0(왼),1(오), 2(비어두기) 가능! 1. n을 입력받는다. n은 사자의 마리수가 아니라, 우리의 세로 갯수이다. a에 넣어준다. a = int(input()) b = [[0]*3 for i in range(a+1)] b에 세로 개수만..

규칙을 찾는 것이 우선이다. 0으로 시작하지 않고, 1이 연속으로 나오지 않는 이진수의 수를 찾으면 된다. 1자리 수일 때 1 하나, 2자리 수일 때 10 하나, 3자리 수일 때 100, 101로 2개이다. 아직까진 무슨 규칙인지 모른다. 4자리 수일 때 1000, 1001, 1010 3개이다. 5자리 수는 1000, 10101, 10010, 10001, 10100 이렇게 5가지가 나온다. 이를 통해 2자리수 이상일 때, 10으로 시작한다는 공통점이 있고, 그 전 자리수에서 0과 1을 채워넣는다는 사실과 그 전전자리수와 합하면 1이 겹치지 않게 만들 수 있다는 규칙을 찾을 수 있다. 1. a에 자리수를 입력받는다. a = int(input()) 2. 문제에 90까지라 했으므로 인덱스가 90을 가르킬 수 ..

우선, 문제를 이해하는 데 조금 오래 걸렸다. 1의 자리 수일 때는 0을 제외한 모든 수가 계단수가 된다고 가정해야 두번째 자리의 계단 수를 찾을 수 있게 된다. 그리고, 자리수가 늘어날 때마다 1의자리수가 가장 왼쪽부터 시작한다고 생각하면 된다. 2자리 수일 때 0 옆에 올 수 있는 것은 1로 하나다, 1 옆에는 0과 1, 2부터 계속 두개씩 나오다가 9일 때는 8만 올 수 있다. 3자리 수일 때도 마찬가지일 것이다. 그렇다면 dp배열에다가 1자리 수를 입력해 놓고, 자리 수가 늘어날 때마다 i-1, i+1일 때의 경우를 합쳐주면 된다는 사실을 알 수 있다. 다만 숫자가 0일 때와 9일 때는 각각 1일때, 8일때의 값만 계산해야 한다. 1. 자리 수를 a변수에 입력한다. a = int(input()) ..