Programmers
-
1039.교환Programmers 2024. 5. 19. 15:22
테스트 코드는 모두 통과했으나 , 반례를 못찾아서 풀지 못한 문제다..# 무조건 k번 수행해야 함# input : n, k / output : k번 바꾸어 나올 수 있는 최댓값n, k = input().split()number = list(n)k = int(k)# 자릿수가 1자리이거나, 뒷자리에 0만 포함되어 있을 시if len(number) == 1 or set(number) == {number[0], '0'}: result = -1 print(result)else: idx = 0 # 1~i 내림차순 진행 # i~k 내림차순으로 정렬되어 있을 경우, 남은 횟수(k-i)만큼 가장 작은 두 수끼리 교환 while (idx 0): max_idx = idx ..
-
14503. 로봇 청소기Programmers 2024. 4. 21. 19:59
https://www.acmicpc.net/problem/14503 # output: 청소하는 영역의 개수 # N * M # 동서남북 # 반시계 방향으로 90도 회전 # dfs def dfs(x, y, d): global count # 방향 : 북 / 동 / 남 / 서 # direction = [0, 1, 2, 3] dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] if not visited[x][y]: visited[x][y] = 1 # 아직 청소되지 않은 경우, 현재 칸을 청소한다. if graph[x][y] == 0: graph[x][y] = 1 count += 1 aldy_cln = 0 for i in range(4): nx, ny = x + dx[i], y + dy[i] if ..
-
9205.맥주 마시면서 걸어가기Programmers 2024. 4. 20. 19:54
https://www.acmicpc.net/problem/9205 from collections import deque t = int(input()) # 테스트 개수 def bfs(x, y, graph): # 한 박스당 1000m 이동 가능(50*20) # 1000M 내로 편의점 / 목적지 도달 실패 ==> sad while graph: a, b = graph.popleft() if abs(x-a) + abs(y-b) >= 1000: print("sad") return False else: x, y = a, b print("happy") return True # main for _ in range(t): n = int(input()) # 맥주를 파는 편의점의 개수 graph = deque() start_..
-
2468. 안전영역Programmers 2024. 4. 18. 19:56
그저 최소(최대)만 보면 BFS로 눈돌아가는 나..(언제 정신차릴래)ㅜ from collections import deque n = int(input()) graph = [list(map(int, input().split())) for _ in range(n)] # max 값 찾기(O(n)) max_value = 0 for i in range(len(graph)): a = max(graph[i]) if a > max_value: max_value = a q = deque([(0,0)]) i = 0 count = 1 # 1씩 줄여나가면서 안전 영역 개수 찾기 by BFS while q: x, y = q.popleft() value = max_value - i dx = [0, 0, 1, -1] dy = [1..
-
[2644]촌수 계산Programmers 2024. 4. 10. 18:12
https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 처음엔 DFS로 접근을 하려고 했으나..문제가 있었다. n = int(input()) a, b = map(int, input().split()) m = int(input()) graph = [[] for _ in range(n+1)] for _ in range(m): x, y = map(int, input().split()) graph[x].append(y) graph[y]...
-
[SQL] 노선별 평균 역 사이 거리 조회하기Programmers 2024. 3. 10. 17:09
총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻합니다. 총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 해주시고, 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력해주세요. 결과는 총 누계 거리를 기준으로 내림차순 정렬해주세요. SELECT A.ROUTE , CONCAT(ROUND(SUM(A.D_BETWEEN_DIST), 2), 'km')AS TOTAL_DISTANCE , CONCAT(ROUND(AVG(A.D_BETWEEN_DIST), 3), 'km') AS AVERAGE_DISTANCE FROM SUBWAY_DISTANCE A GROUP BY ROUTE ..
-
[Leet Code] Best time to Buy and Sell Stock IIProgrammers 2024. 2. 9. 15:40
class Solution(object): def maxProfit(self, prices): total = 0 buy = prices[0] # 산 주식을 리스트의 첫번째 원소로 지정 for i in range(1, len(prices)): if prices[i] - buy > 0: # 현재 인덱스에서 주식을 팔았을 때 이득이면 팔고, 총 수익에 더해준다 total += prices[i] - buy buy = prices[i] else: buy = min(buy, prices[i]) return total 최저 값을 buy로 선언 후, 리스트 내 원소들과 비교하며 양수면 더해주고, 아니면 최저값만 갱신해주는 연산을 처리한다 [1,2,3,4,5]를 예시로 든다면, # buy = 1 1 - 1 = 0 이므로..
-
DP 에러 찾기Programmers 2023. 9. 3. 15:58
동전 2 1 초 (추가 시간 없음) 128 MB 64987 19571 13830 29.412% 문제 n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수 있다. 사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다. 입력 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어질 수도 있다. 출력 첫째 줄에 사용한 동전의 최소 개수를 출력한다. 불가능한 경우에는 -1을 출력한다. 다음 코드의 ..