본문 바로가기

Archived(CSE Programming)

(169)
미래 도시(파이썬) / 최단경로 그래프 문제 방문원 A는 1에 있는데 K번에 있는 사람과 소개팅을 한다고 한다. 그리고 방문원 A는 X 회사로 가야한다. 즉, 소개팅을 할 K번 회사를 방문 후에 X 회사에 최종 도착해야 한다. 이 때, 총 N개의 도시와 M개의 도로가 주어질 경우 A가 갈 경로의 최단 거리를 구하라 입력 첫째 줄에 전체 회사의 개수 N과 경로의 개수 M이 공백으로 구분되어 차례대로 주어진다(1= INF: print(-1) else: print(graph[1][k] + graph[k][x])
효율적인 화폐 구성 (파이썬) / DP(다이나믹 프로그래밍) 문제 N가지 종류의 화폐가 있다. 이 화폐들의 개수를 최소한으로 이용해서 그 가치의 합이 M원이 되도록 하려고 한다. 이때 각 화폐는 몇 개라도 사용할 수 있으며, 사용한 화폐의 구성은 같지만 순서만 다른 것은 같은 경우로 구분한다. 예를 들어 2원, 3원 단위의 화폐가 있을 때는 15원을 만들기 위해 3원을 5개 사용하는 것이 가장 최소한의 화폐 개수이다. "INPUT" 2 15 2 3 "OUTPUT" 5 "INPUT" 3 4 3 5 7 "OUTPUT" -1 입력 첫째 줄에 N,M이 주어진다(1
떡볶이 떡 만들기(파이썬) / 이진탐색 문제 오늘 동빈이는 여행 가신 부모님을 대신해서 떡집 일을 하기로 했다. 오늘은 떡볶이 떡을 만드는 날이다. 동빈이네 떡볶이 떡은 재밌게도 떡볶이 떡의 길이가 일정하지 않다. 대신에 한봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰준다 절단기에 높이(H) 를 지정하면 줄지어진 떡을 한 번에 절단한다. 높이가 H보다 긴 떡은 H 위의 부분이 잘릴 것이고, 낮은 떡은 잘리지 않는다 예를 들어 높이가 19, 14, 10, 17cm인 떡이 나란히 있고 절단기 높이를 15cm로 지정하면 자른 뒤 떡의 높이는 15, 14, 10, 15cm가 될 것이다. 잘린 떡의 길이는 차례대로 4, 0, 0, 2cm이다. 손님은 6cm만큼의 길이를 가져간다 손님이 왔을 때 요청한 총 길이가 M일 때 적어도 M만큼의 떡을..
프로그래머스 - 네트워크(파이썬, LV3) / 탐색(DFS) https://programmers.co.kr/learn/courses/30/lessons/43162?language=python3 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있�� programmers.co.kr 문제는 간단한 DFS 문제이다. LV3의 난이도가 아닌거 같은데 여튼, 섬 개수 찾기와 같은 유형의 문제이다. DFS를 통해 방문할 수 있는 곳을 전부 방문하고 방문하지 않은 곳이 있으면 다시 DFS를 호출하면서 전체를 탐색할 동안 DFS를 몇 번 호출했는지를 찾으면 된다. def solution(n, computers):..
미로탈출(파이썬) / 탐색(BFS) 문제 동빈이는 N * M 크기의 직사각형 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 동빈이의 위치는 (1, 1)이고 미로의 출구는 (N, M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있다. 이때 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다. 입력 첫째 줄에 두 정수 N, M(4= M: continue # 벽 체크 if graph[next_x][next_y] == 0: continue # 처음 방문시 거리 증가 if graph[next_x][next_y] ==..
음료수 얼려먹기(파이썬) / 탐색(DFS) 문제 N * M 크기의 얼음틀이 있다. 구멍이 뚫려있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오. 다음의 4 X 5 얼음 틀 예시에서는 아이스크림이 총 3개 생성된다. "INPUT" 00110 00011 11111 00000 "OUTPUT" 3 입력 첫 번째 줄에 얼음 틀의 새로 길이 N과 가로 길이 M이 주어진다.( 1
프로그래머스 - 구명보트(파이썬, LV2) / 그리디(Greedy) https://programmers.co.kr/learn/courses/30/lessons/42885?language=cpp 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 풀이의 핵심은 모든 사람이 보트 1개씩 필요하다고 초기값을 둔다. 그리고 전체 사람들의 무게를 정렬해서 가장 무거운 사람과 가장 가벼운 사람 순으로 같이 갈 수 있는지 같이 갈 수 있을 경우 보트 수를 1개 뺀다(같이 타므로). 이런식으로 전체 사람들을 탐색하여 가장 가벼운 사람과 무거운 사람이 만나는 지점에 달..
프로그래머스 - 큰 수 만들기(파이썬, LV2) / 그리디(Greedy) https://programmers.co.kr/learn/courses/30/lessons/42883?language=python3# 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 이 문제는 그리디로 현재 최상의 값을 계속 골라나가면 된다. 그런데, 최상의 값을 찾기 위한 탐색 범위를 계속 한정지어서 풀려고 했다. 그러나 그렇게 풀어버리니 아래 테스트 케이스의 시간 복잡도를 극복하지 못했다. O(N^2)이 되버린 것이다. "INPUT" number = "1234567890"*100000 k = 999999 "OUTPUT" answer = "99999...." 그래서 결국 다른 풀이를 찾아봤다. (출처 : scarletbreeze의 블로그) 핵심은 O(N)이 되도록 문자열을 한 번씩 파..