프로그래머스(53)
-
[Programmers] 정수 삼각형
https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 메모이제이션을 요구하는 DP 문제이다. 문제를 처음 접근할 때 위에서부터 접근하여 헤맸었고 아래서 위로 올라가라는 힌트를 보고 쉽게 해결하였다. 코드 class Solution { public int solution(int[][] triangle) { for (int i = triangle.length - 1; i > 0; i--) { for (int j = 0; j < triangle..
2023.09.12 -
[Programmers] 무인도 여행
https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 기본적인 BFS 문제이다. 주의할 점은 방문 처리를 큐에 넣기 직전에 해줘야 한다. Point를 꺼낸 후 방문 처리를 하게 되면 맨 마지막 칸이 두 번 들어가기 때문이다. 코드 import java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.Queue; import java...
2023.09.12 -
[Programmers] 2개 이하로 다른 비트
https://school.programmers.co.kr/learn/courses/30/lessons/77885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 비트 처리에 관한 문제이다. 처음엔 XOR 연산을 통해 한 비트를 이동시키면서 계산하는 방식으로 풀었다. 그런데 10번, 11번 TC에서 시간 초과가 발생했다. 그래서 다른 방법을 찾던 중 규칙을 통해 해결하는 방법을 알게 되었고 이를 활용해 해결했다. 먼저 짝수는 매우 간단히 해결할 수 있다. 이진수 특성상 짝수의 첫 번째 비트는 항상 0이기 때문에 1을 더하기만 하면 된다. 홀수의 ..
2023.09.12 -
[Programmers] 쿼드압축 후 개수 세기
https://school.programmers.co.kr/learn/courses/30/lessons/68936 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 재귀를 활용한 배열 탐색 문제이다. 문제를 보고 재귀적으로 나누어나가면서 범위별로 탐색해야 한다는 접근 방법은 알았으나 구현 단계에서 접근을 잘못해서 시간이 걸렸다. 처음에는 배열의 범위 길이를 넣고 이를 나누어나가면서 탐색하려 했으나 0과 2에 대한 처리가 잘 되지 않았다. 그래서 0부터 추가하는 방식으로 변경하였고 이를 통해 해결하였다. 코드 class Solution { priva..
2023.09.12 -
[Programmers] 연속된 부분 수열의 합
https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 기본적인 투 포인터 문제이다. 먼저 완전 탐색으로 해결하니 많은 테스트 케이스에서 시간 초과가 발생했고 투 포인터로 해결하였다. 원리는 간단하다. 왼쪽과 오른쪽 포인터 변수를 하나씩 둔다. sum에 누적합 결과를 저장한다. 만약 sum이 k보다 작으면 오른쪽 포인터를 오른쪽으로 이동시키면서 누적합 계산을 한다. 그러다 k와 같아지면 범위 비교를 한다. 그렇게 해서 더 간격이 좁은 구간..
2023.09.07 -
[Programmers] 연속 부분 수열 합의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 1부터 원소 개수까지 연속되는 수열의 합에 대해서 중복없이 총 개수를 구하는 문제이다. 처음에는 큐를 활용하여 풀려고 했으나 시간 초과가 발생했었다. 그래서 방법을 찾던 중 기존 배열을 2배로 늘리는 방법이 있었고 이를 활용했다. [4, 7, 9, 1, 1] 이라는 배열이 있다고 하자. 이 배열을 0부터 길이 - 1만큼의 부분을 뒤에다 붙이면 원형 탐색을 하는 것처럼 사용할 수 있다...
2023.09.07