본문 바로가기

알고리즘(algorithm)

(90)
프로그래머스) 정수 삼각형 python 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(triangle): answer = 0 for i in range(1, len(triangle)): # 첫 번째 줄은 더할 값이 없으므로 2번째 줄부터 순회합니다. for j in range(len(triangle[i])): if j == 0: triangle[i][j] += triangle[i - 1][j] # 아래줄의 가장 첫 번째 수의 경우 윗 줄의 첫 번재 값만 접하므로 # 윗 줄의 첫 번째 수를 더해주고 elif j == len(triangle[i]) - 1: triangle[..
프로그래머스) 가장 가까운 같은 글자 python def solution(s): answer = [] d = dict() for i in range(len(s)): if s[i] in d: answer.append(i - d[s[i]]) d[s[i]] = i else: d[s[i]] = i answer.append(-1) # 단어를 순회하며 문자가 나온적 없다면 answer에 -1을 넣어주고 # d의 s[i]에 i를 넣어주고 나온적 있다면 i - d[s[i]]을 answer에 넣어주고 # d의 s[i] 값을 갱신해줍니다. return answer
프로그래머스) 카드 뭉치 python 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(cards1, cards2, goal): answer = 'Yes' # answer에 기본값을 'Yes'로 설정해줍니다. first = 0 second = 0 # 첫번째 카드 뭉치의 확인할 위치를 담을 first와 두번째 카드 뭉치의 위치를 # 담을 second를 설정해줍니다. for i in range(len(goal)): if len(cards1) > first and cards1[first] == goal[i]: first += 1 # cards1의 크기가 first보다 크고 ca..
프로그래머스) 타겟 넘버 python 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr from collections import deque def solution(numbers, target): answer = 0 q = deque() q.append((0, 0)) # 시작값(0)과 계산해야할 자리값을 q에 넣어줍니다. while q: l, num = q.popleft() if l == len(numbers): if num == target: answer += 1 # l이 numbers의 길이와 같아지면 값이 target과 같은지 확인하고 # answer에 값을 갱신해줍니다. elif l < ..
백준 14888 연산자 끼워넣기 python 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5,..
백준 1890 점프 python 1890번: 점프 첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장 www.acmicpc.net 문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다. 각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거리를 의미한다. 반드시 오른쪽이나 아래쪽으로만 이동해야 한다. 0은 더 이상 진행을 막는 종착점이며, 항상 현재 칸에 적혀있는 수만큼 오른쪽이나 아래로 가야 한다. 한 번 점프를 할 때, 방향을 바꾸면 안 된다. 즉, 한 칸에서 오른쪽으로 점프를 하거나, 아래..
백준 1238 파티 python 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이..
백준 17086 아기 상어 2 python 문제 N×M 크기의 공간에 아기 상어 여러 마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 아기 상어가 최대 1마리 존재한다. 어떤 칸의 안전 거리는 그 칸과 가장 거리가 가까운 아기 상어와의 거리이다. 두 칸의 거리는 하나의 칸에서 다른 칸으로 가기 위해서 지나야 하는 칸의 수이고, 이동은 인접한 8방향(대각선 포함)이 가능하다. 안전 거리가 가장 큰 칸을 구해보자. 입력 첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸과 상어의 수가 각각 한 개 이상인 입력만 주어진다. 출력 첫째 줄에 안전 거리의 최댓값을 출력한다. 풀이 from collecti..