Algorithm/문제풀이 18

플로이드 워셜 알고리즘 - 미래 도시

미래 도시 (Python)📝 문제 설명미래 도시에는 1번부터 N번까지의 회사가 있는데 특정 회사끼리는 서로 도로를 통해 연결되어 있다.방문 판매원 A는 현재 1번 회사에 위치해 있으며, X번 회사에 방문해 물건을 판매하고자 한다.미래 도시에서 특정 회사에 도착하기 위한 방법은 회사끼리 연결되어 있는 도로를 이용하는 방법이 유일하다.또한 연결된 2개의 회사는 양방향으로 이동할 수 있다. 공중 미래 도시에서 특정 회사와다른 회사가 도로로 연결되어 있다면, 정확히 1만큼의 시간으로 이동할 수 있다.또한 오늘 방문 판매원 A는 기대하던 소개팅에도 참석하고자 한다.소개팅의 상대는 K번 회사에 존재한다. 방문 판매원 A는 X번 회사에 가서 물건을 판매하기 전에 먼저소개팅 상대의 회사에 찾아가서 함께 커피를 마실 ..

다익스트라 알고리즘 - 전보

전보 (Python)📝 문제 설명어떤 나라에는 N개의 도시가 있다. 그리고 각 도시는 보내고자 하는 메시지가 있는 경우,다른 도시로 전보를 보내서 다른 도시로 해당 메시지를 전송할 수 있다.하지만 X라는 도시에서 Y라는 도시로 전보를 보내고자 한다면, 도시 X에서 Y호 향하는통로가 없다면 Y는 X로 메시지를 보낼 수 없다. 또한 통로를 거쳐 메시지를 보낼 때는일정 시간이 소요된다.어느 날 C라는 도시에서 위급 상황이 발생했다. 그래서 최대한 많은 도시로 메시지를 보내고자 한다.메시지는 도시 C에서 출발하여 각 도시 사이에 설치된 통로를 거쳐, 최대한 많이 퍼져나갈 것이다.각 도시의 번호와 통로가 설치되어 있는 정보가 주어졌을 때, 도시 C 에서 보낸 메시지를 받게 되는도시의 개수는 총 몇 개이며 도시들..

다이나믹 프로그래밍 - 금광

금광 (Python)📝 문제 설명n x m 크기의 금광이 있습니다.금광은 1 x 1 크기의 칸으로 나누어져 있으며 각 칸은 특정한 크기의 금이 들어 있습니다.채굴자는 첫 번째 열부터 출발하여 금을 캐기 시작합니다.맨 처음에는 첫 번째 열의 어느 행에서든 출발할 수 있습니다.이후에 m - 1번에 걸쳐서 매번 오른쪽 위, 오른쪽, 오른쪽 아래 3가지 중 하나의위치로 이동해야 합니다.결과적으로 채굴자가 얻을 수 있는 금의 최대 크기를 출력 하는 프로그램을 작성하세요.📌 조건입력 조건 첫째 줄에 테스트 케이스 T가 입력됩니다. (1 각 테스트 케이스는 줄 바꿈을 이용해 구분합니다매 테스트 케이스 첫째 줄에 n과 m 이 공백으로 구분되어 입력됩니다 (1 둘째 줄에 n x m개의 취에 매장된 금의 개수가 공..

다이나믹 프로그래밍 - 1 로 만들기

1 로 만들기 (Python)📝 문제 설명정수 X가 주어졌을 때, 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지 입니다.X가 5로 나누어 떨어지면, 5로 나눕니다.X가 3으로 나누어 떨어지면, 3으로 나눕니다.X가 2로 나누어 떨어지면, 2로 나눕니다.X에서 1을 뺍니다.정수 X가 주어졌을 때, 연산 4개를 적절히 활용해서 값을 1로 만들고자 합니다.연산을 사용하는 횟수의 최솟값을 출력하세요.예를 들어 정수가 26이면 다음과 같이 계산해서 3번의 연산이 최솟값입니다.26 -> 25 -> 5 -> 1📌 조건입력 조건첫째 줄에 정수 X가 주어집니다.1 출력 조건첫째 줄에 연산을 하는 횟수의 최소값을 출력합니다.🔽 입력 예시26🔼 출력 예시3🏆 정답 코드def 모범답안(): x = int..

다이나믹 프로그래밍 - 개미 전사

개미 전사 (Python)📝 문제 설명개미 전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려고 한다.메뚜기 마을에는 여러 개의 식량창고가 있는데 식량 창고는 일직선으로 이어져 있다.각 식량창고에는 정해진 수의 식량을 저장하고 있으며 개미 전사는 식량창고를선택적으로 약탈하여 식량을 빼앗을 예정이다.이때 메뚜기 정찰병들은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식량창고가공격 받으면 바로 알아챌 수 있다.따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량 창고를 약탈해야 한다. 1 3 1 5이때 개미 전사는 두 번째 식량창고와 네 번째 식량 창고를 선택했을 때 최댓값인 총 8개의식량을 빼앗을 수 있다. 개미 전사는 최대한 ..

이진 탐색 - 정렬된 배열에서 특정 수의 개수 구하기

정렬된 배열에서 특정 수의 개수 구하기 (Python)📝 문제 설명N개의 원소를 포함하고 있는 수열이 오름차순으로 정렬되어 있습니다.이때 이 수열에서 x 가 등장하는 횟수를 계산하세요.예를 들어 수열 {1, 1, 2, 2, 2, 2, 3}이 있을 때 x = 2 라면,현재 수열에서 값이 2인 원소가 4개이므로 4를 출력 합니다.단, 이 문제는 시간 복잡도 O(logN)으로 알고리즘을 설계하지 않으면 시간초과 판정을 받습니다.📌 조건첫째 줄에 N과 정수 x가 정수 형태로 공백으로 구분되어 입력됩니다.(1 둘째 줄에 N개의 원소가 정수 형태로 공백을 구분되어 입력됩니다.(-10 ** 9 수열의 원소 중에서 값이 x인 원소의 개수를 출력합니다.단, 값이 x인 원소가 하나도 없다면 -1을 출력합니다.🔽 입력..

이진 탐색 - 떡볶이 떡 만들기

떡볶이 떡 만들기 (Python)📝 문제 설명떡볶이 떡의 길이가 일정하지 않습니다.대신에 한 봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰줍니다.절단기에 높이(H)를 지정하면 줄지어진 떡을 한 번에 절단합니다.높이가 H보다 긴 떡은 H 위의 부분이 잘릴 것이고, 낮은 떡은 잘리지 않습니다.예를 들어 19, 14 ,10, 17cm 인 떡이 나란히 있고 절단기 높이를 15cm로 지정하면자른 뒤 떡의 높이는 15, 14 ,10, 15cm 가 될 것입니다.잘린 떡의 길이는 차례때로 4,0,0,2cm 입니다. 손님은 6cm 만큼의 길이를 가져갑니다.손님이 왔을 때 요청한 총 길이가 M일 때 적어도 M 만큼의 떡을 얻기 위해 절단기에설정할 수 있는 높이의 최댓값을 구하는 프로그램을 작성하시오.📌 조건..

BFS & DFS - 미로 탈출

미로 탈출 (Python)📝 문제 설명재석이는 N x M 크기의 직사각형 형태의 미로에 갇혔습니다.미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 합니다.재석이의 위치는 (1, 1) 이며 미로의 출구는 (N, M) 의 위치에 존재하며한 번에 한 칸씩 이동할 수 있습니다. 이 때 괴물이 있는 부분은 0으로괴물이 없는 부분은 1로 표시되어 있습니다.미로는 반드시 탈출할 수 있는 형태로 제시됩니다.이때 재석이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하세요.칸을 셀 때는 시작칸과 마지막 칸을 모두 포함해서 계산합니다.📌 조건첫째 줄에 두 정수 0 다음 N개의 줄에는 각각 M개의 정수 (0 혹은 1) 로 미로의 정보가 주어집니다.각각의 수들은 공백 없이 붙여서 입력으로 제시됩니다.또한 시작 칸..

BFS & DFS - 음료수 얼려 먹기

음료수 얼려 먹기(Python)📝 문제 설명N x M 크기의 얼음 틀이 있습니다. 구멍이 뚫려 있는 부분은 0,칸막이가 존재하는 부분은 1로 표시됩니다. 구멍이 뚫려 있는 부분끼리상, 하, 좌, 우로 붙어 있는 경우 서로 연결 되어 있는 것으로 간주합니다.이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를구하는 프로그램을 작성하세요📌 조건첫 번째 줄에 얼음 틀의 세로길이 N과 가로길이 M이 주어집니다.(1두 번째 줄부터 N + 1 번째 줄까지 얼음 틀의 형태가 주어집니다.이때 구멍이 뚫려있는 부분은 0, 그렇지 않은 부분은 1입니다.한번에 만들 수 있는 아이스크림 개수를 출력합니다🔽 입력 예시4 500110000111111100000🔼 출력 예시3💡 문제 해결 접근BFS 문제풀이..

구현 - 시각

시각 (Python)📝 문제 설명정수N이 입력되면 00시 00분 00초 부터 N시 59분 59초 까지의 모든 시각 중에서3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하세요예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로세어야 하는 시각입니다.00시 00분 03초00시 13분 30초반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안되는 시각 입니다.00시 02분 55초01시 27분 45초📌 제한사항0🔽 입력 예시N = 5🔼 출력 예시11475💡 문제 해결 접근입력된 N 값으로 만들어 질 수 있는 모든 경우(00:00:00 ~ N:59:59)의 수 에서 3 들어가는지 확인하기def solution(N): cnt = 0 for i in range(..