문제풀이25 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. 10844번 쉬운 계단 수 2021. 8. 20. 11724번 연결 요소의 개수 이 문제는 DFS 알고리즘을 이용하여 풀었다. 문제풀이 생각보다 단순한 문제다. 입력받은 그대로 그래프를 생성하고, DFS로 그래프를 탐색해서 연결되어 있는 요소가 몇개 인지 확인해서 개수를 출력하면 되는 문제 이다. 코드 import sys sys.setrecursionlimit(10**5) def graph(x): visit[x] = 1 for y in range(1, N + 1): if arr[x][y] == 1 and visit[y] == 0: graph(y) N, M = map(int, sys.stdin.readline().split()) arr = [[0] * (N + 1) for _ in range(N + 1)]; visit = [0 for _ in range(N + 1)] count = 0.. 2021. 8. 20. 16953번 A -> B 이 문제는 그리디 알고리즘을 이용해 풀었다. 문제풀이 정수 A를 B로 변환하는 문제이다. 처음에는 A를 증가 시키면서 변환하는 코드를 짰지만 B를 감소 시키면서 A를 찾아가는 것이 좀 더 이해하기 쉬운 코드로 짤 수 있었다. 1. A와 B의 값을 비교하여 A가 더 크지 않은지 그리고 연산 가능한 조건들을 충족 하는지를 확인한다. 충족하지 않는다면 -1의 값을 출력한다. 2. B를 2로 나누었을 경우 나머지가 0이었을때, 나누어진 몫을 저장한다. 1번째 조건에 따른다. 3. B를 10으로 나누었을 경우 나머지가 1이었을 때, 1을 제거해주고 몫을 저장한다. 2번째 조건에 따른다. 4. 그리고 A와 B의 값이 같을때 반복을 중단하고 최종 값을 출력한다. 이때 한가지 조심해야 할 것이 있는데 처음부터 A와 B.. 2021. 8. 20. 이전 1 2 3 4 5 6 7 다음 반응형