코딩테스트[파이썬]/입문자를 위한 코딩테스트 핵심 42

[그래프] -컴퓨터 개수

컴퓨터 개수 현수는 종합학원에 다니고 있습니다. 현수가 다니는 종합학원은 서버 컴퓨터가 있는 큰 교실 과 수학을 공부하는 작은 교실로 되어 있다. 서버 컴퓨터가 있는 큰 교실의 모든 컴퓨터는 서 버와 직간접적으로 연결되어 인터넷이 되지만 수학교실에 있는 컴퓨터들은 서버와 연결되어 있지 않아 인터넷은 되지 않는다. 서버 컴퓨터는 1번 컴퓨터이다. 1, 2, 3, 4, 5, 6번 컴퓨터는 인터넷이 되지만 7, 8, 9, 10, 11번 컴퓨터는 수학교실에 있는 컴퓨터들로 인터넷이 되지 않는다. 수학교실에 있는 컴퓨터들끼리는 서로 연결이 되어 있을 수도 있고, 연결이 되어 있지 않을 수도 있다. 매개변수 n에 학원의 컴퓨터 총 개수가 주어지고, 매개변수 edges에 컴퓨터간 연결정보가 주 어지면 현수가 다니는 ..

[그래프]- 인접 행렬, 인접 그래프

• 그래프는 G(V, E)로 정의하고, V(Vertext : 정점)과 E(Edge : 간선) 의 집합을 의미한다. • 연결되어 있는 원소들간의 관계를 표현하는 자료구조이다. 인접행렬 2차원 배열을 이용해 그래프를 표현하는 방법 1) 무방향 그래프 입력 형식 : edge = [[1, 2], [1, 3], [2, 4], [2, 5], [3, 4]] graph = [[0] * (n+1) for _ in range(n+1)] for [a, b] in edge: graph[a][b] = 1 graph[b][a] = 1 2) 방향 그래프 입력 형식 : edge = [[1, 2], [1, 3], [2, 5], [3, 4], [4, 2]] graph = [[0] * (n+1) for _ in range(n+1)] fo..

[BFS] -검정색 영역구하기

검정색 영역구하기 5 * 5 이차원 배열에 모니터 화면을 표현합니다. 모니터의 화변은 최초 검정색과 흰색으로만 표현되어 있습니다. 검정색은 1, 흰색은 0으로 표현됩니다. 상하좌우로 1(검정색)이 연결되어 있으면 한 영역으로 간주합니다. 화면의 격자 정보가 위와 같다면 검정색으로 칠해진 영역은 2곳입니다. 매개변수 board에 모니터 화면의 격자정보가 주어지면 검정색으로 칠해진 영역은 총 몇 개가 있는지 구하여 반환하는 프로그램을 작성하세요. 제한사항: • 검정색 영역은 1개 이상 반드시 존재합니다. 나의 코드 from collections import deque def solution(board): answer = 0 dx=[-1,0,1,0] dy=[0,1,0,-1] dq=deque() for i in..

[BFS] -최소점프

최소 점프 현수는 놀이터에서 놀다가 집으로 가려고 합니다. 놀이터의 위치와 집의 위치가 수직선상의 좌표 점으로 주어집니다. 놀이터는 수직선상의 0지점입니다. 현수는 놀이터에서 스카이콩콩을 타고 점프를 하면서 집으로 이동하려고 합니다. 점프는 다음과 같은 규칙으로 합니다. 1) 현재 지점에서 앞으로 +1 만큼 점프이동할 수 있습니다. 2) 현재 지점에서 뒤쪽으로 -1 만큼 점프이동할 수 있습니다. 3) 현재 지점에서 앞쪽으로 +5 만큼 긴 점프이동을 할 수있습니다. 매개변수 home에 현수의 집의 위치가 주어지면 놀이터에서 집까지 최소 몇 번의 점프로 집에 도착할 수 있는지 최소 점프횟수를 구하여 반환하세요. 제한사항: • 수직선의 좌표는 0부터 10,000까지입니다. • 현수가 집으로 반드시 갈 수 있습..

[DFS] -픽셀수 구하기

픽셀수 구하기 5 * 5 이차원 배열에 모니터 화면을 표현합니다. 모니터의 화변은 최초 검정색과 흰색으로만 표현되어 있습니다. 검정색은 1, 흰색은 0으로 표현됩니다. 상하좌우로 1(검정색)이 연결되어 있으면 한 영역으로 간주합니다. 화면의 격자 정보가 위와 같다면 검정색으로 칠해진 영역은 2이고, 첫 번째 영역의 픽셀수(격 자수)는 5개이고, 두 번째 영역의 픽셀수는 3개입니다. 매개변수 board에 모니터 화면의 격자정보가 주어지면 검정색으로 칠해진 각 영역의 픽셀수를 순서대로 배열에 담아 반환하세요. 영역의 순서는 각 영역의 행번호, 열번호가 가장 작은 픽셀 을 기준으로 행번호가 작은 것부터이며 행번호가 같을 경우 열 번호가 작은 영역 순으로 배열 에 담습니다. 나의 코드 dx=[-1,0,1,0] ..

[DFS] -검정색 구하기

검정색 영역구하기 5 * 5 이차원 배열에 모니터 화면을 표현합니다. 모니터의 화변은 최초 검정색과 흰색으로만 표현되어 있습니다. 검정색은 1, 흰색은 0으로 표현됩니다. 상하좌우로 1(검정색)이 연결되어 있으면 한 영역으로 간주합니다. 화면의 격자 정보가 위와 같다면 검정색으로 칠해진 영역은 2곳입니다. 매개변수 board에 모니터 화면의 격자정보가 주어지면 검정색으로 칠해진 영역은 총 몇 개가 있는지 구하여 반환하는 프로그램을 작성하세요. 제한사항: • 검정색 영역은 1개 이상 반드시 존재합니다. 나의 코드 def DFS(x,y,board): board[x][y]=0 dx=[-1,0,1,0] dy=[0,1,0,-1] for k in range(4): nx=x+dx[k] ny=y+dy[k] if 0

[스택과 큐] - 고장난 프린터

고장난 프린터 현수가 다니는 회사의 프린터가 고장이 나서 프린트를 요청한 순서대로 프린트를 하는게 아니 라 약간 이상은 규칙에 의해서 프린트를 합니다. 이상한 규칙은 다음과요청한 순서에서 먼저 이 규칙을 반복하면서 만약 프린트를 요청한 [3, 1, 4, 5, 2, 6, 7] 3번, 1번 작업을 프린트 하고, 4번 작업은 맨뒤로 보냅니다. [5, 2, 6, 7, 4] 같습니다. 2개의 작업을 프린트하고, 3번째 작업은 순서상 맨 뒤로 보내버립니다. 프린트를 합니다. 작업번호 순서가 아래와 같다면 5번, 2번 작업을 프린트 하고, 6번 작업을 맨뒤로 보냅니다. [7, 4, 6] 7번, 4번 작업을 프린트 하고 6번 작업을 맨뒤로 보냅니다. [6] 마지막으로 6번 작업을 프린트합니다. 매개변수 nums에 프린..

[스택과 큐] -샌드위치

샌드위치 현수는 샌드위치를 만들려고 합니다. 식탁에 샌드위치 재료인 식빵과 토마토가 일렬로 놓여 있습니다. 현수가 만드는 샌드위치는 식빵-토마토-식빵 순으로 합쳐서 포장을 합니다. 현수는 식탁에 놓 여 있는 재료의 순서를 유지하면서 샌드위치를 만들어야 합니다. 만약 식탁에 [식빵, 식빵, 식빵, 토마토, 식빵, 식빵, 토마토, 식빵, 토마토, 식빵] 순으로 놓여 있다면 현수는 3번째, 4번째, 5번째를 합쳐서 샌드위치를 만들고, 6번째, 7번째, 8번째를 합 쳐서 샌드위치를 만들고, 2번째, 9번째, 10번째를 합쳐서 샌드위치를 만들어 총 3개의 샌드 위치를 만들 수 있습니다. 매개변수 nums에 식탁에 놓여 있는 샌드위치 재료의 정보가 주어 지면 현수가 만들 수 있는 샌드위치의 총 개수를 반환하는 프로..

[스택 과 큐] -연속된 문자 지우기

연속된 문자 지우기 매개변수 s에 문자열이 주어지면 이웃한 두 개의 문자가 같으면 두 문자를 제거합니다. 이 과 정을 반복해서 최종적으로 남는 문자만으로 이루어진 문자열을 반환하는 프로그램을 작성하세요. 만약 "acbbcaa"라는 문자열이 주어진다면 최초 bb가 연속되어 있어 제거하고 나면 "accaa"가 되고, 다시 cc가 연속되어 제거하면 "aaa"가 되고 "aa"연속되어 제거하면 "a"가 최종적으로 남 습니다. 제한사항: • 문자열 s의 길이는 100,000을 넘지 않습니다. • 문자열 s는 소문자로만 이루어져 있습니다. 나의 코드 def solution(s): answer = "" stack=[] stack.append(s[0]) for i in range(1,len(s)): if stack an..

[스택과 큐] -Backspace

Backspace 현수는 주어진 문자열의 문자 순서대로 키보드 자판의 문자를 쳐 화면에 s문자열을 작성합니 다. 문자열에는 '#'문자가 있는데 이 문자는 Backspace키를 의미합니다. 매개변수 s에 현수가 키보드 자판을 쳐야할 순서인 문자열이 주어지면 현수가 s문자열을 작성 했을 때 최종적으로 화면에 작성된 문자열을 반환하는 프로그램을 작성하세요. 화면에는 적어도 문자 한 개는 작성되어 있습니다. 제한사항: • 문자열 s의 길이는 1,000을 넘지 않습니다. 나의 코드 def solution(s): answer = "" stack=[] for x in s: if x=='#': stack.pop() else: stack.append(x) return answer.join(map(str,stack)) p..