📌문제일직선상의 마을에 여러 채의 집이 위치한다. 이 중에서 특정 위치의 집에 특별히 한개의 안테나를 설치하기로 하였다. 효율성을 위해 안테나로부터 모든 집까지의 거리의 총합이 최소가 되도록 설치하려고 한다. 이때 안테나는 집이 위치한 곳에만 설치할 수 있고 논리적으로 동일한 위치에 여러 개의 집이 존재하는 것이 가능하다.집들의 위치가 주어질 때 안테나를 설치할 위치를 선택하는 프로그램을 작성하시오. 📌풀이중간값에 해당하는 위치의 집에 안테나를 설치했을 때 안테나로부터 모든 집까지의 거리의 총합이 최소가 됨모든 집의 위치 정보를 입력받은 뒤 이를 정렬해서 중간값 출력 📌코드n = int(input())data = list(map(int, input().split()))data.sort()print(..
📌문제도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.1. 국어 점수 감소하는 순서2. 국어 점수 같으면 영어 점수 증가하는 순서3. 국어 영어 점수 같으면 수학 점수 감소하는 순서4. 모든 점수 같으면 이름이 사전 순으로 증가하는 순서 📌풀이튜플을 원소로 하는 리스트가 있을 때 리스트를 정렬하면 각 튜플을 구성하는 원소의 순서에 맞게 정렬만약 튜플이 3개의 원소로 구성된다면 첫번째 원소의 순서에 맞게 정렬, 첫번째 원소 값이 같은 경우 두번째 원소의 순서에 맞게 정렬, 두번째 원소의 값이 같은 경우 세번째 원소의 순서에 맞게 정렬sort 함수의 key 속성 사용📌코드n = int(input())studen..
📌문제N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워 넣을 수 있는 N-1개의 연산자가 주어진다. 우리는 수와 수 사이에 연산자를 하나씩 넣어 수식을 하나로 만들 수 있는데 이때 주어진 수의 순서를 바꾸면 안된다.식의 계산은 연산자 우선순위 무시하고 앞에서부터 진행한다. 나눗셈은 정수 나눗셈으로 몫만 취한다. N개의 수와 N-1개의 연산자가 주어졌을 때 만들 수 있는 식의 결과가 최대인 것과 최소인 것을 구하는 프로그램을 작성하시오.📌풀이모든 경우의 수를 계산하기 위해 DFS 혹은 BFS를 이용사칙 연산을 중복으로 사용할 수 있기 때문에 중복 순열을 계산만약 n=4라면 사칙연산 중 중복을 허용하여 3개를 뽑아 나열하는 모든 경우를 고려 📌코드n = in..
📌문제https://school.programmers.co.kr/learn/courses/30/lessons/60058 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📌풀이문제에 제시된 알고리즘을 재귀적으로 구현 📌코드#균형 잡힌 문자열의 인덱스 반환def balanced_index(p): count=0 #왼쪽 괄호 개수 for i in range(len(p)): if p[i]=='(': count+=1 else: count-=1 if count==0: return i #올바른 ..
📌문제NxN 크기의 시험관이 있다. 시험관은 1x1 크기의 칸으로 나눠지며, 특정한 위치에 바이러스가 존재할 수 있다. 바이러스의 종류는 1~K번까지 K가지가 있으며, 모든 바이러스는 이 중 하나에 속한다.모든 바이러스는 1초마다 상 하 좌 우의 방향으로 증식하는데 매초 번호가 낮은 종류의 바이러스부터 먼저 증식한다.시험관의 크기와 바이러스의 위치 정보가 주어졌을 때 S 초가 지난 후에 (X, Y)에 존재하는 바이러스의 종류를 출력하는 프로그램을 작성하시오. 📌풀이너비우선탐색(BFS) 이용낮은 번호부터 증식하므로 초기에 큐에 원소를 삽입할 때 정렬해서 낮은 바이러스의 번호부터 삽입 📌코드from collections import dequen, k = map(int, input().split())gr..
📌문제연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다.연구소는 크기가 NxM인 직사각형으로 나타낼 수 있으며 직사각형은 1x1 크기의 정사각형으로 나누어져 있다. 연구소는 빈칸, 벽으로 이루어져 있으며 벽은 칸 하나를 가득 차지한다.일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며 꼭 3개를 세워야 한다.벽을 3개 세운 뒤 바이러스가 퍼질 수 없는 곳을 안전 영역이라고 할 때 얻을 수 있는 안전 영역 크기의 최댓값을 구하는 프로그램을 작성하시오. 📌풀이벽의 개수가 3개가 되는 모든 조합을 찾은 뒤에 조합에 대해 안전 영역의 크기를 ..
📌문제어떤 나라에는 1~N번까지의 도시와 M개의 단방향 도로가 존재한다. 모든 도로의 거리는 1이다. 이때 특정한 도시 X부터 출발하여 도달할 수 있는 모든 도시 중 최단 거리가 정확히 K인 모든 도시의 번호를 출력하는 프로그램을 작성하시오. 📌풀이모든 간선의 비용이 1로 동일할 때는 너비 우선 탐색(BFS) 이용하여 최단 거리 찾음특정한 도시 X를 시작점으로 BFS 수행하여 모든 도시까지의 최단 거리를 계산한 후 그 값이 K인 경우에 해당 도시 번호 출력 📌코드from collections import deque# 도시의 개수, 도로의 개수, 거리 정보, 출발 도시 번호n, m, k, x = map(int, input().split())graph = [[] for _ in range(n + 1)]..
📌문제https://school.programmers.co.kr/learn/courses/30/lessons/60062 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📌풀이원형으로 나열된 데이터를 처리하는 경우에는 문제 풀이 간단히 하기 위해 길이를 2배로 늘려서 원형을 일자 형태로 만듦 📌코드def solution(n, weak, dist): #길이를 2배로 늘려서 원형을 일자 형태로 변형 length=len(weak) for i in range(length): weak.append(n+weak[i]) answer=len(dist)+1 #투입할 친구 수의 최솟값..
📌문제뱀이 나와서 기어 다니는데 사과를 먹으면 뱀 길이가 늘어나는 게임이 있다. 뱀이 기어다니다가 벽 또는 자기 자신의 몸과 부딪히면 게임이 끝납니다.게임은 NxN 정사각 보드 위에서 진행되고 몇몇 칸에 사과가 놓여졌다. 보드의 상하좌우 끝에는 벽이 있다. 게임을 시작할 때 뱀은 맨 위 좌측에 위치하고 뱀의 길이는 1이다. 뱀은 처음에 오른쪽을 향한다.뱀은 매 초마다 이동하는데 다음과 같은 규칙을 따른다.-먼저 뱀은 몸 길이를 늘려 머리를 다음 칸에 위치시킨다.-만약 이동한 칸에 사과가 있다면 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다-만약 이동한 칸에 사과가 없다면 몸 길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸 길이는 변하지 않는다.사과의 위치와 뱀의 이동 경로가 주어질 때 이 ..
📌문제https://school.programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📌풀이열쇠를 적당히 회전하고 이동시켜 자물쇠의 홈에 맞게 끼워 넣는 것자물쇠의 크기의 3배인 새로운 리스트를 만들어 중앙 부분으로 옮김자물쇠 리스트의 값에 열쇠 리스트의 값을 더한 뒤에 더한 결과가 자물쇠 부분의 모든 값이 1인지 확인 📌코드#2차원 리스트 90도 회전def rotate_a_matrix_by_90_degree(a): n=len(a) #행 길이 m=len(a[0]) #열 길이 result=[[0]*n f..