문제난이도: 플레티넘 514003번: 가장 긴 증가하는 부분 수열 5 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구해야 한다.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 다음과 같이 가장 긴 증가하는 부분 수열 시리즈가 있다.LIS (Longest Increasing Subsequence) 알고리즘은 가장 긴 증가하는 부분 수열을 찾는 문제를 해결하는 알고리즘으로 주어진 수열에서 순서를 유지하면서, 원소들이 증가하는 부분 수열 중 가장 긴 수열을 찾아내는 것을 목표로 한다. 만약 해당 알고리즘이 생소하다면 위 시리즈를 순서대로 풀어보는 것을 추천한다.알..
Python
문제2. Add Two Numbers두 개의 비어있지 않은 링크드 리스트가 주어진다. 각 노드는 0 또는 자연수로 채워져있다. 숫자는 역순으로 저장돼있고, 두 노드의 각 숫자의 합을 연결 리스트로 반환한다.l1 = [2, 4, 3], l2 = [5, 6, 4]라면 결과는 [7, 0, 8]이 나와야 한다.말 그대로 두 링크드 리스트에서 각 노드의 숫자를 합해서 하나의 노드로 만든다는 말이다.2 + 5 = 74 + 5 = 10 이지만 제한 사항에 다음과 같은 내용이 있다. (0 10은 9보다 크기 때문에 1을 다음 두 노드 간의 합에 반영한다.이렇게 342 + 464 = 807이라고 돼있는 설명이 더 헷갈리게 한다🤪노드의 값이 0과 9사이 값이라는 걸 제한사항이 아닌 문제 위쪽에 적어주는 것이 덜 헷갈릴 ..
문제3016. Minimum Number of Pushes to Type Word II 영어 소문자로 이루어진 word가 주어진다. 전화기 키패드의 키들은 영어 소문자로 이루어진 고유한 collection과 매핑돼있다. 각 키들을 눌러서 word를 만들 수 있다.예를 들어, 2번 키는 ["a", "b", "c"]와 매핑돼있다. "a"를 누르기 타이핑 하기 위해서는 한 번, "b"를 누르기 위해서는 2번, "c"를 누르기 위해서는 세 번을 누르면 된다.키들은 수 제한없이 여러 문자로 매핑될 수 있지만, 각 문자는 정확히 하나의 키와 매핑돼야 한다. word를 타이핑 하기 위해 각 키를 remapping하고 눌러야 하는 최소 횟수를 구해라.(1, *, #, 0은 어떤 문자도 매핑할 수 없다)풀이 과정풀이 시..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제1~n까지 서로 다른 번호가 매겨진 등대 n개가 존재한다.뱃길은 n-1개 존재하며, 어느 등대에서 출발해도 다른 모든 등대까지 이동할 수 있다.한 뱃길의 양쪽 끝 등대 중 적어도 하나는 켜져있도록 등대를 켜두어야 한다. - 2 ≤ n ≤ 100,000- lighthouse의 길이 = n – 1- lighthouse 배열의 각 행 [a, b]는 a번 등대와 b번 등대가 뱃길로 연결되어 있다는 의미- 1 ≤ a ≠ b ≤ n- 모든 등대는 서로 다른 등대로 이동할 수 있는 뱃길이 존재하도록 입력이 주어진다. 풀이 ..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제자연수 x를 y로 변환하려고 한다. 사용할 수 있는 연산은 다음의 3개가 가능하다.- x에 n을 더한다.- x에 2를 곱한다.- x에 3을 곱한다.x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return, 만들 수 없다면 -1 return - 1 ≤ x ≤ 1,000,000- 1 ≤ n 풀이 과정풀이 시간: 15분알고리즘: BFSx와 y를 노드라고 생각한다면 시작 노드에서 도착 노드까지 가는 최단 거리(시간)를 구하는 문제이기 때문에 BFS로 풀이가 가능하다. O(y): 최악의 경우 y개의 모든 노드를 ..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제왼손(4), 오른손(6)위에 두고 타이핑을 시작- 이동하지 않고, 제자리에서 다시 누르는 경우: 가중치 1- 상하좌우 인접한 숫자를 누르는 경우: 가중치 2- 대각선으로 인접한 숫자를 누르는 경우: 가중치 3- 같지 않고 인접하지 않은 숫자를 누를 때는 위 규칙에 따라 가중치 합이 최소가 되는 경로를 따른다. 1 ≤ numbers의 길이 ≤ 100,000- numbers는 아라비아 숫자로만 이루어진 문자열 풀이 과정풀이 시간: 2시간 이상 접근하다 포기하고 접근방법 참고알고리즘: DP + BFS1. 초기 설정-..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제정수로 이루어진 배열 numbers모든 원소에 대해 뒷 큰수들을 차례대로 담은 배열을 return(단, 뒷 큰수가 존재하지 않는 원소는 -1을 담는다)- 4 ≤ numbers의 길이 ≤ 1,000,000 - 1 ≤ numbers[i] ≤ 1,000,000 풀이 과정풀이 시간: 25분알고리즘: 자료구조(스택) or 우선순위큐(힙)numbers의 길이가 최대 1,000,000이기 때문에 최악의 경우 O(NlogN)으로 풀이해야 한다. 1. stack을 이용해 O(N)으로 풀이할 경우맨 뒤의 수는 항상 뒷큰수를..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제1억 x 1억 크기의 행렬이 주어진다.s보다 크거나 같고 e보다 작거나 같은 수 중에서 억억단에서 가장 많이 등장한 수를 답해야 한다.만약 가장 많이 등장한 수가 여러 개라면 그 중 가장 작은 수를 답해야 한다. - 1 ≤ e ≤ 5,000,000- 1 ≤ starts의 길이 ≤ min {e,100,000}- 1 ≤ starts의 원소 ≤ e- starts에는 중복되는 원소가 존재하지 않는다. 풀이 과정풀이 시간: 2시간 이상알고리즘: 수학, 누적합이 문제의 경우, e가 최대 5,000,000이기 때문에 시간복..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제지도는 1 x 1크기의 사각형들로 이루어진 직사각형 격자 형태이며, 격자의 각 칸에는 'X' 또는 1에서 9 사이의 자연수가 적혀있다. 지도의 'X'는 바다를 나타내며, 숫자는 무인도를 나타낸다. - 상, 하, 좌, 우로 연결되는 땅들은 하나의 무인도를 이룬다.- 지도의 각 칸에 적힌 숫자는 식량을 나타내는데, 상, 하, 좌, 우로 연결되는 칸에 적힌 숫자를 모두 합한 값은 해당 무인도에서 최대 며칠동안 머물 수 있는지를 나타낸다.지도를 나타내는 문자열 배열 maps가 매개변수로 주어질 때, 각 섬에서 최대 며..