LV2 프로세스 (Java)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 location이라는 값을 간편히 처리하기 위해서는 실제로 큐처럼 데이터를 넣고 빼고하면 힘들것이라 생각했다. 따라서 priorities라는 배열은 가만히 두고, 배열을 순회하는 식으로 생각했다. 어차피 큐는 한 방향으로 추가 되니 이렇게 순회해도 큰 문제는 없었다. 배열을 넘어가면 다시 0으로 돌아가는 방식으로 말이다. 다음은 우선순위를 어떻게 계산하는가 였다. 나는 현재 배열에서 다..
LV2 H-Index (Java)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 문제를 해석해보면, 배열내의 n이상의 값이 n개 있을때, 그 중 가장 최대 n을 구하라는 말이다. 따라서 d[n]이라는 배열을 하나 선언해서 d[n] => n개 이상의 숫자 개수로 정의했다. 이후에 citations에서 값을 하나씩 가져와서, 그 값이하의 d를 모두 채워줬다. citations은 최대 1,000이고, 논문 인용 횟수는 10,000이여서 시간 초과 걱정은 없다. 그리고 마..
LV2 할인 행사 (Java)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/131127# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 map 자료구조를 활용하여 쉽게 풀 수 있었다. 우선 내가 원하는 값들을 [제품, 개수] 형식으로 초기화 해준다. 다음에는 할인 현황을 담을 map 을 계속 갱신해준다. 하루가 지남에 따라 가장 앞의 값을 제거해주고, 새로운 제품을 추가해준다. 그리고 할인중인 목록에 내 제품이 있으면서, 개수도 다 만족한다면 정답에 값을 추가해주면 된다. (단, 할인 현황 map에 개수가 10개가 ..
LV2 연속 부분 수열 합의 개수 (Java)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이 문제의 핵심은, 수열합을 구할때 이미 구한 부분을 어떻게 다시 계산하지 않고 구할 수 있느냐이다. (만약 수열때마다 모든 합을 구하면 1000 (원소의 개수) * 1000 (수열의 최대 길이) * 1000 (수열합 구하기) 의 시간 복잡도가 나오게 될 것이다..) [1, 2, 3, 4] 배열이 있을때 수열 2인 값을 구할때 [1, 2] 의 합을 구하게 될 것이다. 그리고 수열3인 ..
LV2 멀리 뛰기 (Java)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 dp로 풀이했다. 1칸 또는 2칸만 움직일 수 있다는걸 반대로 생각하면 -> 내가 있는 현재 위치 - 1 에서 오는 방법, 내가 있는 현재 위치 -2 에서 오는 방법 두가지가 있다. 따라서 점화식은 d[i] = d[i-1] + d[i-2] 로 정의할 수 있다. 그리고 값 오버 플로우를 대비해서 dp 배열에 저장할때부터 % 연산하는걸 주의해야 한다. 마지막에 return할때 처리할려면 이..
LV2 N개의 최소공배수 (Java)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 나무위키로 최소 공배수의 특징을 확인하였다. 세개 이상의 수의 최소 공배수를 구하기 위해서는, 두 수의 최소공배수와 새로운 수의 최소 공배수를 구하면 된다. 두 수의 최소 공배수 같은 경우에는 최대 공약수(gcd)를 통해서 구할 수 있는데, 최대공약수는 유명한 "유클리드 호제법" 으로 구할 수 있다. 따라서, 두 수의 최대 공약수를 구한 후에 이 값을 활용하여 최대 공배수를 구하는 과정..
LV2 구명보트 (Python)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 대놓고 그리디라고 적혀있어서 그리디 방식으로 접근했다. "인원은 최대 2명" "무게는 limit 초과 되면 안됨" 두가지의 조건을 가지고 풀어야 한다. 그리디 방식으로 보트를 최소한으로 띄울려면 한 보트안에 몸무게가 많이 나가는 사람1명 + 몸무게가 적게 나가는 사람1명 방식으로 태워야 한다. 따라서 우선 몸무게가 큰 순으로 정렬을 했다. 다음에는 포인터를 두개 두었다. 하나는 무거운 ..
LV3 110옮기기 (Python)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/77886 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 해당 문제는 "110" 을 찾아서, 어떻게 옮길지가 관건인 문제다. 우선 "사전순으로 앞서는" 숫자의 개념을 생각해보자. 10과 01이 있을경우 사전순으로 앞서는 숫자는 01이다. 10은 10진수로 2이고, 01은 1이다. 이 말은 2진수로 나타낸 숫자를 10진수로 바꾸었을때, 작은 숫자가 사전순으로 앞선다는 뜻이다. 동시에 2진수는 왼쪽일수록 가중치가 높아지기 때문에 작은 숫자를 만들..
LV3 다단계 칫솔 판매 (Python)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/77486 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 딕셔너리를 활용하여 풀었다. 첫째로 자신을 추천해준 사람을 저장해주는 recommender 두번째로 판매원들마다 수익을 저장할 income 이다. enroll과 referral 을 활용하여 recommender 를 key는 추천받은 사람, value는 추천해준 사람으로 초기화 하고, 이 때 income도 판매원마다 0으로 초기화 해준다. 이후에 수익을 계산해준다. 우선 10프로가 1원 ..
LV3 스티커 모으기 (2) (Python)
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12971 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 dp 문제이다. 1. dp 점화식 d라는 dp 배열이 있을때 d[n]은 n번째 티켓까지 고려했을 때 가장 높은 점수가 들어가 있다고 가정하자. 이후 점화식을 어떻게 세울지 고민해보면 된다. 만약 내가 n번째 티켓을 고른다고 생각해보자. 그러면 n-1번째 티켓 값은 사용하지 못할것이다. 그리고 d[n-2] 값에 현재 고른 티켓값을 합치면 될 것이다. n번째 티켓을 고르지 않는다면? d[n..