Algorithm 243

[소프티어 6246번] 순서대로 방문하기(HSAT 7회 정기 코딩 인증평가 기출)

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai import sysfrom collections import deque# 0 - 빈칸, 1 - 벽# 이동은 상하좌우 중 인접한 칸만 가능# 한번 지났던 지점은 다시 방문 X# 방문해야 하는 지점의 첫 지점이 출발점, 마지막 지점이 도착점# 순서대로 방문해야 하는 칸을 이동하는 시나리오 수input = sys.stdin.readlinen, m = map(int,input().split())area = [list(map(int,input().split())) for _ in range(n)]visited = [[False]*n for _ in range(n)]visit_list = [] # 방문해야 하는 지점들을 저장하는 배열answer ..

Algorithm/DFS 2024.06.18

[소프티어 6282번] 장애물 인식 프로그램

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sysfrom collections import deque# 1 - 장애물, 0 - 도로# 장애물 블록수 + 각 블록에 속하는 장애물의 수를 오름차순으로 정렬input = sys.stdin.readlinedx, dy = [-1,1,0,0], [0,0,-1,1]N = int(input())area = [list(map(int,list(input()))) for _ in range(N)]visited = [[False]*N for _ in range(N)]answer = []def bfs(x,y): queue = deque([(x,y)]) visited[x][y] = True count = 1 whi..

Algorithm/BFS 2024.06.16

[소프티어 7703번] X marks the Spot (한양대 HCPC 2023)

Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.aiimport sys# 1. n개의 문자열쌍(S,T)이 주어지는데, 각 쌍에 대해서 S와 T의 길이는 같다# 2. S에서 글자 x 또는 X가 등장하는 위치를 P라고 한다.(유일)# 3. 이때 T의 P번째 글자를 읽는다.(소문자는 대문자로 변환)input = sys.stdin.readlineN = int(input())answer = []for _ in range(N): str1, str2 = input().split() str1_set, str2_set = set(str1), set(str2) x_index = -1 X_index = -1 if 'x' in str1_set: x_index = str1..

Algorithm/String 2024.06.16

[소프티어 6248번] 출퇴근길

# 시간 초과 코드(10/100)import sysinput = sys.stdin.readlinesys.setrecursionlimit(10**6)# 동환이의 출퇴근 길은 1~n까지 번호가 매겨진 단방향 그래프# m개의 일방통행 도로가 존재# 동환이의 집과 회사는 각각 정점 S, T로 나타냄 (출퇴근길은 S와 T 사이의 경로)# S에서 T로 가는 출근 경로와 T에서 S로 가는 퇴근 경로에 모두 포함될 수 있는 정점의 개수# 단, 출퇴근길에서 목적지 정점을 방문하고 나면 동환이는 더 이상 움직이지 않는다.# 즉, 출근길 경로에 T는 마지막에 정확히 1번만 등장하며 퇴근길 경로도 마찬가지로 S는 마지막에 1번만 등장# (대신 출근길에 S와 퇴근길에 T와 같이 출발지점은 여러번 등장해도 됨)n, m = map..

Algorithm/DFS 2024.06.15

[백준 5014번] 스타트링크

# 스타트링크는 총 F층으로 이루어진 고층 건물에 사무실이 있다# 스타트링크가 있는 곳의 위치는 G층이다# 강호가 지금 있는 곳은 S층# 엘리베이터는 버튼이 2개밖에 없다# U버튼은 위로 U층을 가는 버튼, D버튼은 아래로 D층을 가는 버튼# (만약 U층 위, 또는 D층 아래에 해당하는 층이 없을 때는, 엘리베이터는 움직이지 않는다)# 강호가 G층에 도착하려면, 버튼을 적어도 몇 번 눌러야 하는지 구하는 프로그램# 만약, 엘리베이터를 이용해서 G층에 갈 수 없다면, "use the stairs"를 출력from collections import dequeF, S, G, U, D = map(int,input().split())visited = [False]*1000001answer = float("inf")..

Algorithm/BFS 2024.06.09

[프로그래머스] 안전지대

def solution(board): # 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류 # 지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재 answer = 0 def return_boom_set(x,y): temp_set = set() for i in range(x-1,x+2): for j in range(y-1,y+2): if 0  본 문제는 지뢰가 설치된 영역이 주어지고, 지뢰가 설치된 자리와 지뢰를 둘러싼 자리들이 위험지대라고 가정할 때 안..

[백준 2636번] 치즈

https://www.acmicpc.net/problem/2636 # 판의 가장자리에는 치즈가 놓여 있지 않다.# 치즈에는 하나 이상의 구멍이 있을 수 있다.# 공기와 접촉된 칸은 한 시간이 지나면 녹아 없어진다.# 치즈의 구멍 속에는 공기가 없지만 구멍을 둘러싼 치즈가 녹아서 구멍이 열리면 구멍 속으로 공기가 들어가게 된다.# 공기 중에서 치즈가 모두 녹아 없어지는 데 걸리는 시간과 모두 녹기 한 시간 전에 남아있는 치즈조각이 놓여 있는 칸의 개수를 구하는 프로그램from collections import dequedx = [-1,1,0,0]dy = [0,0,-1,1]r, c = map(int,input().split())area = [list(map(int,input().split())) for _ ..

Algorithm/BFS 2024.06.04

[백준 4485번] 녹색 옷 입은 애가 젤다지?

# 젤다의 전설 게임에서 화폐의 단위는 루피(rupee) # '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다 # 링크는 지금 도둑루피만 가득한 N x N 크기의 동굴의 제일 왼쪽 위에 있다 # 링크는 이 동굴의 반대편 출구, 제일 오른쪽 아래 칸인 [N-1][N-1]까지 이동해야 한다 # 동굴의 각 칸마다 도둑루피가 있는데, 이 칸을 지나면 해당 도둑루피의 크기만큼 소지금을 잃게 된다 # 링크가 잃을 수밖에 없는 최소 금액은 얼마일까? import sys from collections import deque input = sys.stdin.readline dx = [-1,1,0,0] dy = [0,0,-1,1] INF = float("inf") index..

Algorithm/BFS 2024.04.22

[백준 23289번] 온풍기 안녕!

23289번: 온풍기 안녕! 유난히 추운 날씨가 예상되는 이번 겨울을 대비하기 위해 구사과는 온풍기를 설치하려고 한다. 온풍기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기 www.acmicpc.net import sys from collections import deque input = sys.stdin.readline # 가장 처음에 모든 칸의 온도는 0 # 1. 집에 있는 모든 온풍기에서 바람이 한 번 나옴 # 2. 온도가 조절됨 # 3. 온도가 1 이상인 가장 바깥쪽 칸의 온도가 1씩 감소 # 4. 초콜릿을 하나 먹는다. # 5. 조사하는 모든 칸의 온도가 K 이상이 되었는지 검사. # 모든 칸의 온도가 K이상이면 테스트를 중단하고, 아니면 1부터 다시 ..

[백준 17471번] 게리맨더링

17471번: 게리맨더링선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다.www.acmicpc.netimport sys from itertools import combinations from collections import deque # 구역을 두 개의 선거구로 나눠야 하고, 각 구역은 두 선거구 중 하나에 포함되어야 한다. # 선거구는 구역을 적어도 하나 포함해야 하고, 한 선거구에 포함되어 있는 구역은 모두 연결되어 있어야 한다. input = sys.stdin.readline n = int(input()) peoples = [0] + list(map(int,input().split..