Algorithm 124

[프로그래머스] 점프와 순간 이동 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 처음 해당 문제에 어떤 방법으로 접근해야할지 고민이 많았습니다. 그리디 → 백트래킹 → 메모이제이션 → 숫자 규칙 처음에는 그리디 알고리즘 느낌으로 순간 이동으로 최대한 많이 이동함으로써 배터리를 이용한 이동횟수를 최소화하고 나머지 이동 칸수에 대해서만 배터리를 이용하여 1칸씩 전진하는 방법을 취할려고 했었으나, 특정 경우의 수에선 순간 이동 중에 배터리를 사용하여 한 칸 전진한 후 다시 순간 이동하는 것이 최적의 해인 경우가 존재했기 때문에 그리디 알고리즘으로 구현하기는 다소 어렵겠다는..

[프로그래머스] 쿼드압축 후 개수 세기 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 해당 문제는 재귀 함수를 이용하여 해결할 수 있었습니다. 최초 정사각형 배열 arr이 주어질 때, 각 요소가 다음과 같다고 가정해보겠습니다. 현재의 배열에서는 1의 개수는 9개, 0의 개수는 7개로 압축이 불가능합니다. 따라서 행과 열을 절반씩 나눠서 4개의 영역으로 재탐색합니다. 1번, 3번, 4번 영역은 앞선 탐색과 마찬가지로 하나의 수로 일치하지 않아 압축이 불가능하여 다시 각 영역별로 행과 열을 절반씩 나눠서 4개의 영역으로 탐색해야합니다. 반면, 2번 영역은 0이라는 수로 일치하..

[프로그래머스] 삼각 달팽이 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 해당 문제는 전형적인 배열 채우기 문제의 유형이었다고 생각합니다. 이 문제를 풀기 앞서 코드업의 '2차원 배열 달팽이 채우기'를 문제를 먼저 풀어본다면 많은 참고가 될 수 있습니다. [코드업 - 1484] 2차원 배열 달팽이 채우기 4-1 - Java 문제 설명 [기초-배열연습] 2차원 배열 달팽이 채우기 4-1 다음과 같은 n*m 배열 구조를 출력해보자. 입력이 3 4인 경우 다음과 같이 출력한다. 1 2 3 4 10 11 12 5 9 8 7 6 입력이 4 5인 경우는 다음과 같이 ik..

[프로그래머스] 2개 이하로 다른 비트 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 처음 이 문제에 접근했었던 방식은 주어지는 숫자(number)와 해당 숫자에 1씩 더한 숫자(number + 1)를 XOR 연산(다른 비트일 경우 1)해준 다음 이를 이진수 형태로 바꿔주어 1의 개수를 세주도록 했습니다. for (long number : numbers) { long target = number; while (true) { String xor = Long.toBinaryString(number ^ ++target); long count = xor.chars().filter..

[프로그래머스] 두 큐 합 같게 만들기 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 우선 주어지는 두 배열을 각각 큐로 변환해서 접근했습니다. int length = queue1.length; Queue q1 = new LinkedList(); Queue q2 = new LinkedList(); for (int i = 0; i < length; i++) { q1.add(queue1[i]); q2.add(queue2[i]); } 이후 두 큐의 합(sum1, sum2)을 구하고, 무한 반복문을 순회하면서 sum1과 sum2를 비교하면서 같아질 때까지 디큐 및 엔큐를 해주면서..