Algorithm/Problem Solving 155

[프로그래머스/Programmers] K번째수

K번째수 📝문제 👨‍💻코드 def solution(array, commands): answer = [] for i in range(len(commands)): arr = [] for j in range(commands[i][0] - 1, commands[i][1]): arr.append(array[j]) arr.sort() answer.append(arr[commands[i][2] - 1]) return answer 🤔Review 엄청 쉬운 정렬 문제이다. 그런데 마지막에 answer.append(arr[commands[i][2] - 1])을 해야하는데 answer.append(arr[commands[i][2]] - 1)을 해서 자꾸 index error가 발생했다.....

[프로그래머스/Programmers] 폰켓몬

폰켓폰 📝문제 👨‍💻코드 def solution(nums): answer = 0 result = len(set(nums)) if result >= len(nums) // 2: answer = len(nums) // 2 else: answer = result return answer 🤔Review 처음엔 순열을 사용하여 풀었는데 시간 초과가 발생하였다. 시간 복잡도를 생각하지 못한 것 같다. nums를 set함수를 사용하면 nums안에 있는 수의 개수를 알 수 있다. 그것을 result에 넣고 result가 뽑고자 하는 수 보다 크면 뽑고자 하는 만큼 뽑을 수 있기에 answer에 len(nums) // 2를 넣고 아닐 경우는 answer에 nums안에 있는 수의 개수를 넣는다.

[백준/BOJ] 11724 - 연결 요소의 개수

11724 - 연결 요소의 개수 📝문제 방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오. 👨‍💻코드 from collections import deque import sys n, m = map(int, sys.stdin.readline().split()) arr = [] count = 0 for i in range(n + 1): arr.append([]) for i in range(m): a, b = map(int, sys.stdin.readline().split()) arr[a].append(b) arr[b].append(a) visited = [0] * (n + 1) def bfs(arr, target): queue = dequ..

[백준/BOJ] 10973 - 이전 순열

10973 - 이전 순열 📝문제 1부터 N까지의 수로 이루어진 순열이 있다. 이때, 사전순으로 바로 이전에 오는 순열을 구하는 프로그램을 작성하시오. 사전 순으로 가장 앞서는 순열은 오름차순으로 이루어진 순열이고, 가장 마지막에 오는 순열은 내림차순으로 이루어진 순열이다. N = 3인 경우에 사전순으로 순열을 나열하면 다음과 같다. 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 👨‍💻코드 n = int(input()) arr = list(map(int, input().split())) def perMu(arr): n = len(arr) - 1 i = n while i > 0 and arr[i - 1]

[프로그래머스/Programmers] N으로 표현

N으로 표현 📝문제 👨‍💻코드 def solution(N, number): answer = -1 dp = [] for i in range(1, 9): numbers = set() numbers.add(int(str(N) * i)) for j in range(0, i - 1): for x in dp[j]: for y in dp[-j - 1]: numbers.add(x + y) numbers.add(x - y) numbers.add(x * y) if y != 0: numbers.add(x // y) if number in numbers: answer = i break dp.append(numbers) return answer 🤔Review 조금 복잡한 DP문제였다. 나올 수 있는 값은 1~8 이기 때문에 1..

[백준/BOJ] 1654 - 랜선 자르기

1654 - 랜선 자르기 📝문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터..

[백준/BOJ] 15686 - 치킨 배달

15686 - 치킨 배달 📝문제 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다.치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 집을 기준으로 정해지며, 각각의 집은치킨 거리를 가지고 있다.도시의 치킨 거리는 모든 집의치킨 거리의 합이다. 임의의 두 칸 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2|로 구한다. 예를 들..

[백준/BOJ] 2110 - 공유기 설치

2110 - 공유기 설치 📝문제 도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러개가 같은 좌표를 가지는 일은 없다. 도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다. C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오. 👨‍💻코드 n, c = map(int, input().split()) arr = [] for i in range(n): arr.append(int(input())) arr..

[백준/BOJ] 10816 - 숫자 카드 2

10816 - 숫자 카드 2 📝문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 👨‍💻코드 n = int(input()) arr = list(map(int, input().split())) arr.sort() m = int(input()) target = list(map(int, input().split())) dic = dict() answer = [] for i in arr: if i in dic: dic[i] += 1 else: dic[i] = 1 for i in range(m): if target[i] in dic: answer.appe..

[백준/BOJ] 1302 - 베스트셀러

1302 - 베스트셀러 📝문제 김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다. 오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오. 👨‍💻코드 n = int(input()) arr = [] result = [] for i in range(n): arr.append(input()) for i in arr: result.append((i, arr.count(i))) answer = sorted(result, key=lambda x: (-x[1], x[0])) print(answer[0][0]..