본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

(81)
[pro] 프로그래머스 level3 43164 여행경로 (c++) - DFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/43164?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 이전에도 풀었던 문제라 해설은 생략. 사용하지 않은 티켓이고, 현재 위치가 티켓의 출발지점과 일치할 때 DFS를 새로 호출하면 된다. c++은 split() 함수가 없어서 split() 함수를 stringstream을 이용해 구현해서 사용해야 했다. split() 함수는 꽤 유용하기 때문에 기억해두면 좋을 듯. [코드] #include #include #i..
[pro] 프로그래머스 level2 42885 구명보트 (Java) - 투포인터 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 문제를 제대로 읽으세요.. 구명보트는 작아서 최대 2명!!! 밖에 탈 수 없다. 따라서 정렬해준 후 가장 무거운 사람과 가장 가벼운 사람의 무게 합이 limit 이내라면 구명보트 수 증가 후 인덱스를 둘 다 이동시켜주고, 아니라면 무거운 사람 혼자 타야하므로 구명보트 수 증가 후 무거운 사람을 가리키는 인덱스만 감소시켜준다. [코드] import java.util.*; class..
[pro] 프로그래머스 level3 1833 캠핑 (Java) [문제] https://school.programmers.co.kr/learn/courses/30/lessons/1833?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 먼저 데이터를 정렬해준 후 모든 쐐기 쌍들에 대해서 텐트를 설치할 수 있는지 비교해준다. 직사각형의 넓이가 0이면 텐트를 설치할 수 없으며(같은 r이나 같은 c값을 갖는 경우), 내부에 다른 쐐기가 있다면 텐트를 설치할 수 없다. [코드] import java.util.*; class Solution { public int solution(int n, in..
[pro] 프로그래머스 level2 178870 연속된 부분 수열의 합 (c++) - 투포인터 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/178870?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 투포인터를 이용해 풀 수 있다. 처음 low와 high 인덱스는 모두 0을 가리킨다. 배열을 누적해서 더해가며 sum이 k보다 작으면 high를 증가시켜 더하고, 커지면 현재 low가 가리키고 있는 값을 뺀 후 low를 증가시킨다. sum과 k가 같다면 더 짧은 부분 수열을 선택할 것이므로 길이를 비교해서 더 짧은 경우 갱신해준다. [코드] #includ..
[pro] 프로그래머스 level2 12902 3*n 타일링 (Java) - dp [문제] https://school.programmers.co.kr/learn/courses/30/lessons/12902 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] n이 홀수이면 딱 맞는 타일링이 불가능하므로 0을 반환한다. n이 2인 경우 가능한 경우의 수는 모두 3가지이다. n이 4인 경우 n이 2인 경우를 각각 합쳐서 4를 만들 수 있으므로 f(2)*3이 된다. 또한 여기에 합치지 않고 만들 수 있는 모양이 2개가 추가로 있다. 즉 f(2)*3 + 2가 된다. n이 6인 경우, n이 4인 경우에 n이 2인 경우를 각각 합쳐서 만들 수 ..
[pro] 프로그래머스 level1 64061 크레인 인형뽑기 (Java) - 스택 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 주어진 board내 인덱스만 조절해서 풀어도 되지만 column별 큐에 담아 쉽게 맨 위에 있는 인형을 뽑을 수 있도록 했다. 바구니는 맨 위에 있는 인형과 비교해서 터뜨리거나 그냥 넣기 때문에 스택을 이용해서 구현한다. [코드] package heap_stack_dequeue; import java.util.*; class Pro_level2_64061 { public int ..
[pro] 프로그래머스 level2 131704 택배 상자 (Java) - 시뮬레이션 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/131704 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 메인 컨베이어 벨트는 들어온 순서대로 나가기때문에 Queue를 사용하고, 서브 컨베이어 벨트는 가장 늦게 들어온 택배가 가장 빨리 나가므로 Stack를 사용한다. 택배에 실어야 하는 상자 번호가 현재 상자 번호보다 작다면 서브 컨베이어 벨트에 있다는 의미이므로 서브 컨베이어 벨트의 상자들과 비교한다. 그렇지 않다면 메인 컨베이어 벨트에 있다는 의미이므로 메인 컨베이어 벨트의 상..
[pro] 프로그래머스 level2 131127 할인 행사 (Java) - 시뮬레이션 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] Map을 이용해서 disccount 목록을 이동시켜가며 비교한다. 단순 시뮬레이션 문제! [코드] import java.util.*; class Solution { public int solution(String[] want, int[] number, String[] discount) { int answer = 0; //회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는..