본문 바로가기

Algorithm5

[백준 4673번] [파이썬] 10000이하의 셀프넘버 구하기 / 코드분석 자세한 설명 정답 코드 전문# 4673# n을 d(n)의 생성자라고 하자.# 즉 d(n)은 생성자가 있는, 셀프넘버가 아닌 숫자다.natural = set(range(1, 10001)) # set안에 1부터 10000까지 숫자 생성generated = set() # 빈 set 설정for n in range(1, 10001): # 1부터 10000까지 for문 생성 for j in str(n): # d(n)을 구하기 위한 for문 n += int(j) # n(자기자신)에 각 자리수를 더해주어 d(n)을 구한다. generated.add(n) # d(n) 집어 넣기self_num = sorted(natural - generated) # 1~10000 set에서 생성자가 있는 d(n)들을 삭제하고 .. 2022. 4. 14.
[JAVA] [알고리즘 문제] DFS를 이용한 미로 최단거리 구하기 문제 스틴이는 N*M 크기의 직사각형 형태의 미로에 갇혀있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 스틴이의 위치는 (1,1)이고 미로의 출구는 (N,M)의 위치에 존재하며 한번에 한칸씩 이동할 수 있다. 이때 괴물이 있는 부분은 0으로 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이때 스틴이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. (처음과 끝 칸 포함) 입력조건 첫째 줄에 두 정수 N,M(4101010 >111111 >000001 >111111 >111111 출력 예시 >10 힌트 1.맨 처음에 (1,1)의 위치에서 시작, 시작 값은 항상 1 2. (1,1)좌표에서 상,하,좌,우로 탐색을 진행 (1,2)위치의 값을 .. 2022. 4. 6.
[JAVA] [알고리즘 문제] 버전 비교하는 프로그램 / 내 풀이, 다른 풀이 비교 문제 버전 1과 버전 2의 두 버전 번호가 주어지면 비교합니다. 버전 번호는 점 '.'으로 결합된 하나 이상의 구분된 형태로 구성됩니다. 각각의 구분된 형태는 숫자로 구성되며 선행 0을 포함할 수 있습니다. 버전 번호를 비교하려면 수정 버전을 왼쪽에서 오른쪽으로 순서대로 비교합니다. 선행 0을 무시한 정수 값을 사용하여 비교됩니다. 이것은 1과 001이 동일하다고 간주됨을 의미합니다. 버전 번호가 인덱스에서 구분된 형태로 지정하지 않으면 형태를 0으로 처리하십시오. 예를 들어 버전 1.0은 버전 1.1보다 작지만 버전 0과 버전 1은 0 버전 2, 1을 출력 - 나머지 경우는 0을 출력 예 1 입력 : versio.. 2022. 4. 5.
[JAVA][알고리즘 문제]DFS(Depth-first Search)를 활용한 얼음 틀 문제 문제 N * M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이 때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오. 입력 예시 >4 5 >00110 >00011 >11111 >00000 출력 예시 >3 DFS(Depth-first Search)란? 깊이 우선 탐색이라는 알고리즘이다. "더 나아갈 길이 보이지 않을 때까지 깊이 들어간다"를 원칙으로 한다. 그래프 내의 정점을 방문한다. 마치 미로찾기 처럼. 특징은? 자기 자신을 호출하는 순환 알고리즘이다. 트리 순회(전위, 중위, 후위 순회)는 모두 DFS의 한.. 2022. 3. 31.
[Python] [알고리즘 문제] 리스트를 이용해서 피보나치 수열 만들기 피보나치 수는 첫째 및 둘째 항이 1이며 그 모든 항은 바로 앞 두 항의 합인 수열이다. 따라서 처음 여섯 항은 각각 1, 1, 2, 3, 5, 8이다. 즉, 이후의 항들이 이전의 두 항을 더한 값으로 이루어지는 수열을 말한다. 파이썬으로 정수 n을 입력받아 n 이하까지의 피보나치수열을 출력해보자. 첫 번째 항은 편의상 0이라고 정의했다. n = int(input("num? : ")) # n 입력 li = [0, 1] # 최초 li 정의 print('0',end='') # 최초 0부터 프린트 while (li[0]+li[1]) 2022. 3. 4.