[프로그래머스] 타겟 넘버 문제 정보 https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 분석 numbers의 모든 조합을 BFS으로 만들어낸 후, target과 비교하여 answer를 ++ 풀이 코드 def solution(numbers, target): leaves = [0] # 초기값 answer = 0 for num in numbers: tmp = [] for l in leaves: tmp.append(l + num) tmp.append(l - num) leav..
[프로그래머스] 게임 맵 최단거리 문제 정보 https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 분석 (1,1) -> (n,m)으로의 최단거리를 구하는 문제입니다. (BFS 활용) 풀이 코드 from collections import deque dy = [0, 1, 0, -1] dx = [1, 0, -1, 0] N = 0 M = 0 def is_valid_coord(y,x): return 0
[프로그래머스] 피로도 문제 정보 https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 분석 던전의 최대 개수가 8개이므로, 순열을 통해 모든 case를 나열하고 완전탐색으로 최대 던전 탐험 수를 구했습니다. 풀이 코드 import itertools def getCase(arr): return list(itertools.permutations(arr, len(arr))) def getResult(tup, k): for idx, t in enumerate(tup): i..
[프로그래머스] 카펫 문제 정보 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 분석 우선 yellow 값을 소인수분해하여 yellow의 약수를 구합니다. (A * B 형태, A (B + 2) * 2 + A * 2 주어진 brown 값과 같은 case의 가로, 세로 크기를 리턴합니다 => [B+2, A+2] 풀이 코드 def getCase(num): case = [] for i in ra..
[프로그래머스] 소수 찾기 문제 정보 https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 분석 우선 종이 조각을 이어 붙여 만들 수 있는 만들 수 있는 숫자의 모든 경우의 수를 구해야 한다 -> 순열을 사용한다. 모든 경우의 수에 대하여 소수인지 아닌지 판단한다 -> 완전 탐색 풀이 코드 import itertools def is_decimal(num): if num == 1: return False for x in range(2, num): if num % x == ..
[프로그래머스] 최소직사각형 문제 정보 https://school.programmers.co.kr/learn/courses/30/lessons/86491 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 분석 모든 명함을 탐색하며 최소 직사각형을 만들 수 있는 사이즈를 찾는 문제이므로 완전탐색 알고리즘으로 해결이 가능하다. 모든 명함을 width가 더 크게끔 조정한다. (물론 반대도 가능하다) width 중에서 가장 width와 height 중에서 가장 큰 height를 구하면 최소 직사각형의 사이즈를 구할 수 있다. 풀이 코드 def solution(sizes): answer =..
[프로그래머스] 연속된 부분 수열의 합 문제 정보 https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 분석 누적 합 행렬을 사용하여 구간합을 빠르게 계산할 수 있도록 한다. 수열은 오름차순으로 정렬되어 있고 연속된 수열의 합을 계산하기 때문에, 두 개의 포인터를 사용하여 목표 값 k 를 찾도록 한다 앞쪽 포인터는 그대로 두고 뒤쪽 포인터를 이동시켜가며 k 값에 가까워지는지 확인한다. 만약 구간 합이 k 보다 작다면 더 큰 수가 필요한 것 이기 때문에 뒤쪽 포인터를 더 뒤로 이동시..
썸네일 [알고리즘] 완전 탐색 완전탐색이란 완전탐색은 가능한 모든 경우의 수를 전부 체크해서 정답을 찾는 방법입니다. 무식하게 문제를 푼다는 의미로 "Brute Force" 라고도 부릅니다. 완전탐색은 시간복잡도가 주로 O(N^2) 이상이기 때문에, 입력의 개수(N)에 따른 시간 계산을 면밀히 해주어야 합니다. 완전탐색 알고리즘 유형 Brute Force 기법 : 반복 / 조건문을 활용해 모두 테스트하는 방법 순열(Permutation) : n개 중 r개의 원소를 중복 허용 없이 나열하는 방법. 재귀(Recursive) 비트마스크(Bitmask) : 2진수 비트 연산을 통해 부분 집합을 표현하는 방법 BFS, DFS : 그래프 자료구조에서 모든 정점을 탐색하기 위한 방법 예시문제 [Brute Force 기법 사용] https://ww..
[백준/Python] 1912 연속합 https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 입력 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지..
[백준/Python] 6593 상범 빌딩 https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 문제 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 지나갈 수 없거나, 비어있어서 지나갈 수 있게 되어있다. 당신은 각 칸에서 인접한 6개의 칸(동,서,남,북,상,하)으로 1분의 시간을 들여 이동할 수 있다. 즉, 대각선으로 이동하는 것은 불가능하다. 그리고 상..
[백준/Python] 10026 적록색약 https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은..
썸네일 [백준/Python] 2667 단지번호붙이기 https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고..