Algorithm/Programmers 48

[프로그래머스] 삼각 달팽이 - 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를 비교하면서 같아질 때까지 디큐 및 엔큐를 해주면서..

[프로그래머스] n^2 배열 자르기 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 처음 접근했었던 방법은 2차원 배열을 생성한 후 해당 2차원 배열로부터 left ~ right 길이의 1차원 배열을 잘라내어 이를 반환하는 것이었습니다. 하지만 인자로 주어지는 n의 최대값은 10의 7승으로 n * n 2차원 배열을 만드는 순간 Outofmemoryerror 에러가 발생하게 됩니다. 즉, 주어진 n에 대해서 2차원 배열을 만드는 게 아니라 left와 right 범위에 해당되는 배열만을 추려낼 필요가 있었습니다. 이때, 문제에서 2차원 배열의 값을 채우는 방법에는 일종의 규..

[프로그래머스] 후보키 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 해당 문제는 특정 테이블 형태의 데이터가 주어졌을 때 유일성과 최소성을 만족하는 후보키의 개수를 요구하고 있습니다. 접근 방법으로는 우선 백트래킹을 통해 모든 키에 대한 경우의 수를 구하도록 했습니다. 이때 키의 칼럼 수는 최소 1개에서 최대 릴레이션 상 전체 칼럼 수의 개수(n)와 같습니다. 1개부터 n개까지 순차적으로 백트래킹을 하면서 경우의 수가 만들어지면 해당 키에 대해 유일성과 최소성을 검증(verify 메서드 호출)하도록 했습니다. // ... boolean[] visited;..