Algorithm 179

[Python] 백준 1600번 말이 되고픈 원숭이

문제https://www.acmicpc.net/problem/1600입력첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있는 곳으로는 이동할 수 없다. 시작점과 도착점은 항상 평지이다. W와 H는 1이상 200이하의 자연수이고, K는 0이상 30이하의 정수이다.출력 첫째 줄에 원숭이의 동작수의 최솟값을 출력한다. 시작점에서 도착점까지 갈 수 없는 경우엔 -1을 출력한다.입력 예제14 40 0 0 01 0 0 00 0 1 00 1 0 025 20 0 1 1 00 0 1 1 0출력 예제4-1 문제 풀이말의 움직임은 k번까지만 가능하므로 말과 원숭이의 움직임을 ..

Algorithm/BFS&DFS 2024.09.20

[Python] 백준 11567번 선진이의 겨울왕국

문제https://www.acmicpc.net/problem/11567입력첫 번째 줄은  두 개의 정수 n, m (1 ≤ n, m ≤ 500)이 주어진다. n은 격자에서 행의 개수를 의미하고, m은 열의 개수를 의미한다.다음 줄은 두개의 정수 r1과 c1 (1 ≤ r1 ≤ n, 1 ≤ c1 ≤ m)이 주어진다. 이는 선진이의 초기위치를 나타내고, 초기위치의 빙판길의 상태는 ‘X’로 주어진다.다음 줄은 두개의 정수 r2과 c2 (1 ≤ r2 ≤ n, 1 ≤ c2 ≤ m)가 주어진다. 이는 올라프가 만들어 놓은 탈출구의 위치를 나타내며, 초기 위치와 일치할 수도 있다.다음 n개의 줄에는 각각 m개의 문자로 이루어진 빙판길의 초기 상태가 주어진다. (손상된 얼음이면 'X'로 표시되고, 손상되지 않은 얼음은 '..

Algorithm/BFS&DFS 2024.08.28

[Python] 백준 2146번 다리 만들기

문제https://www.acmicpc.net/problem/2146입력 첫 줄에는 지도의 크기 N(100이하의 자연수)가 주어진다. 그 다음 N줄에는 N개의 숫자가 빈칸을 사이에 두고 주어지며, 0은 바다, 1은 육지를 나타낸다. 항상 두 개 이상의 섬이 있는 데이터만 입력으로 주어진다.출력첫째 줄에 가장 짧은 다리의 길이를 출력한다.입력 예제101 1 1 0 0 0 0 1 1 11 1 1 1 0 0 0 0 1 11 0 1 1 0 0 0 0 1 10 0 1 1 1 0 0 0 0 10 0 0 1 0 0 0 0 0 10 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 00 0 0 0 1 1 0 0 0 00 0 0 0 1 1 1 0 0 00 0 0 0 0 0 0 0 0 0출력 예제3문제 풀이B..

Algorithm/BFS&DFS 2024.08.27

[Python] 프로그래머스 최댓값과 최솟값

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이지문대로 구현하면 되는 단순한 구현문제공백을 기준으로 문자열을 자른 후 숫자로 변환해서 가장 큰 수와 작은수를 찾아 다시 문자열로 변환코드def solution(s): numbers = [] answer = '' s = s.split() for i in range(len(s)): numbers.append(int(s[i])) max_val = max(numbers) min_val = min(numbers) answer = str(min_val)+" "+str(max_val) return answer..

[Python] 프로그래머스 미로 탈출

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이레버까지 도달하는 데 걸리는 시간 + 레버부터 목적지까지 도달하는 데 걸리는 시간을 해야 하므로 bfs를 두 번 돌려야한다.bfs를 돌릴 때 시작지점과 도착지점이 모두 다르므로 인자로 넘겨서 큐에 넣고 탐색이후 한 개라도 도달 할 수 없는 경우가 있다면 -1, 목적지까지 도달 할 수 있다면 시간 반환코드from collections import deque# 상하좌우dy = [-1,1,0,0]dx = [0,0,-1,1]def solution(maps): # start 부터 end까지의 거..

Algorithm/BFS&DFS 2024.07.24

[Python] 프로그래머스 주식가격

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이순서대로 값을 꺼내서 확인하기 위해 주식 가격 정보를 queue로 변경맨 앞에 있는 값부터 확인하면서 확인값이 떨어지면 cnt를 멈추고 떨어지지 않았다면 계속해서 반복최대길이가  100,000이므로 for문을 돌리지 않고 바로바로 꺼내서 확인 -> 시간초과 남 ㅠㅠ코드from collections import dequedef solution(prices): answer = [] prices = deque(prices) while prices: p = prices.popl..

[Python] 프로그래머스 프로세스

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이프로세스 담은 큐 생성편의를 위해 프로세스를 알파벳으로 처리하지 않고 그냥 숫자로 처리했다.우선순위 배열 큐로 변환수행되지 않은 프로세스가 남아있을 때 까지 프로세스와 우선순위 poppop했다면 남은 우선순위를 모두 돌면서 더 높은 순위가 있다면 다시 삽입우선순위를 끝까지 돌았으나 더 높은 순위가 없다면 result에 넣기모든 프로세스가 끝났다면 resut에서 location이 있는 인덱스 찾아서 반환 후 1 더하기프로세스를 0부터 넣었는데 순서는 1부터 시작하므로 1 더해주면 됨코드from col..

[Python] 프로그래머스 기능개발

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 풀이남은 일수 담은 배열 생성편하게 연산하기 위해 큐에 일수 모두 넣기큐에서 pop한 후 그 값이 queue[0]보다 크거나 같다면 함께 처리 할 수 있는 기능queue[0]값 popcnt += 2queue[0]이 더 크다면 함께 처리할 수 없는 기능이므로 answer배열에 여태 계산한 기능 수를 넣고 바깥쪽 루프 연산 다시 시작코드from collections import dequedef solution(progresses, speeds): answer = [] days = [] for..

[Python] 프로그래머스 구명보트

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이 (투포인터 + 그리디)최대 두 명의 사람을 한 보트에 태워보낼 수 있으므로 가장 가벼운 사람 + 가장 무거운 사람을 한 보트에 태워 보내야한다.가장 가벼운 사람과 무거운 사람의 무게를 합한 값이 limit와 같거나 작으면 두 명을 한 보트에 태워 보낼 수 있는 것이므로 양쪽의 포인터를 옮긴다.합한 값이 limit보다 크다면 한 명만 보트에 태워 보낼 수 있으므로 가장 무거운 사람만 먼저 보낸 후 end 포인터만 옮긴다.각 연산 시 보트에 사람을 태워보냈으므로 answer값도 1씩 증가시킨다.코드d..

Algorithm/Greedy 2024.07.16

[Python] 백준 9935번 문자열

문제https://www.acmicpc.net/problem/9935입력첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다.둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다.두 문자열은 모두 알파벳 소문자와 대문자, 숫자 0, 1, ..., 9로만 이루어져 있다.출력 첫째 줄에 모든 폭발이 끝난 후 남은 문자열을 출력한다.입력 예제mirkovC4nizCC44C412ab112ab2ab12ab출력 예제mirkovnizFRULA문제 풀이stack에 문자를 하나씩 넣으면서 bomb문자가 있는지 확인한다.bomb 문자가 있다면 bomb의 길이만큼 stack에서 pop한다.stack에 남아있는 문자가 없다면 FRULA를 출력한다...