전체 글 83

프로그래머스 : 하노이의 탑 (자바, 파이썬)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 재귀적으로 가장 큰 원판을 목적지 기둥으로 옮기고, 나머지 원판들을 중간 기둥을 이용해 재배치하는 과정을 반복 n 개의 원판을 from 기둥에서 to 기둥으로 이동시키는 로직을 재귀적으로 구현합니다. n == 1인 경우, 가장 작은 원판을 바로 to 기둥으로 옮깁니다. n > 1인 경우, n - 1개의 원판을 보조 기둥(여기서는 6 - from - to로 계산)으로 옮기고, 가장 큰 원판을 to 기둥으로 옮긴 후, 보조 기둥에 있는 원판들을 다시 to 기둥으로 옮깁니다. 구현 코드 자바(Java) imp..

Problem_Solving 2024.01.12

백준(BOJ) 15661 : 링크와 스타트 (자바, 파이썬)

15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 설계 N명의 팀원들 사이의 능력치 차이를 최소화하는 문제 문제 해결을 위해 백트래킹 알고리즘을 사용 각 팀원들의 능력치는 2차원 배열 S에 저장되며, 두 팀 간의 능력치 차이는 재귀적으로 계산 재귀 메서드 사용 start와 depth를 매개변수로 하여 현재 팀 구성과 깊이를 추적 현재 구성의 능력치 차이(currentScore)를 계산하고, 이를 minDiff와 비교하여 최소값을 갱신 depth가 N / 2에 도달하면 ..

Problem_Solving 2024.01.12

백준(BOJ) 1527 : 금민수의 개수 (자바, 파이썬)

1527번: 금민수의 개수 첫째 줄에 A와 B가 주어진다. A는 1보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다. B는 A보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 설계 주어진 범위 내에서 "금민수"를 찾는 문제를 해결 금민수란 숫자 4와 7로만 이루어진 숫자를 의미. 예를 들어, 4, 7, 47 등은 금민수. 모든 수를 검사 : 순회하며 주어진 숫자가 금민수인지 판별. 숫자를 10으로 나눈 나머지가 4 또는 7이 아닐 경우, 금민수가 아님. 백트래킹을 통한 금민수 생성 : 재귀적으로 금민수를 생성. 시작 숫자로 4와 7을 사용하고, 각 단계에서 숫자의 끝에 4 또는 7을 추가하여 새로운 금민수를 생성 첫 번째 방법 (모..

Problem_Solving 2024.01.11

백준(BOJ) 2942 : 퍼거슨과 사과 (자바, 파이썬)

2942번: 퍼거슨과 사과 맨체스터 유나이티드의 감독 퍼거슨은 빨간 사과를 R개, 초록 사과를 G개 가지고 있다. 훈련장에 있는 선수들 중 몇 명에게 나누어 주려고 한다. 단, 선수들이 서로 같은 개수의 사과를 받지 못하 www.acmicpc.net 설계 빨간 사과(R)와 초록 사과(G)를 일정한 수의 선수들에게 똑같이 나눠주되, 남는 사과가 없도록 하는 경우의 수를 구하는 문제를 해결 문제의 핵심은 “모든 선수에게 같은 수의 사과를 나눠주면서 남는 사과가 없어야 한다”는 조건 → 이 조건을 만족시키기 위해 빨간 사과와 초록 사과의 수에 대한 최대공약수(Greatest Common Divisor, GCD)를 구하는 것이 중요 최대공약수(GCD)의 중요성 같은 수의 사과 배분: 빨간 사과와 초록 사과를 모..

Problem_Solving 2024.01.10

백준(BOJ) 10972 : 다음 순열 (자바, JAVA)

10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 설계 주어진 순열에 대해 사전순으로 바로 다음에 오는 순열을 찾아 출 순열의 "다음"이라는 것은 사전순으로 바로 다음에 오는 순서를 의미. 먼저 순열에서 뒤쪽부터 탐색하여 이전 숫자보다 현재 숫자가 처음으로 커지는 지점을 찾음. 이 지점을 변경점(cp)으로 하여, 변경점의 숫자보다 큰 숫자 중 가장 뒤에 있는 숫자와 변경점의 숫자를 교환 이후 변경점 이후의 숫자들을 오름차순으로 정렬. 이렇게 하여 얻어진 순열이 입력된 순열의 다음 순열이 됨. 만약 다음 순열이 존재하지 않으면, 즉 주어진 순열이 사전순으로 마지막 순열이면 ..

Problem_Solving 2024.01.05

프로그래머스 : 소수 찾기 (자바, JAVA)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 문자열로 주어진 숫자들을 이용하여 만들 수 있는 모든 숫자 조합 중 소수의 개수를 찾는 문제를 해결 각 숫자 조합은 모든 자리수의 순열을 생성하여 set에 저장 permutate 함수는 주어진 숫자로 가능한 모든 순열을 재귀적으로 생성 생성된 각 숫자 조합에 대해 에라토스테네스의 체를 사용하여 소수를 판별 생성된 모든 숫자 조합에 대해 에라토스테네스의 체를 적용하여 해당 숫자가 소수인지 판별하고, 최종적으로 소수의 개수를 반환 에라토스테네스의 체는 여러 개의 자연수에 대하여 소수를 판별할 때 사용하는 알..

Problem_Solving 2024.01.04

백준(BOJ) 10974 : 모든 순열 (자바, JAVA)

10974번: 모든 순열 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. www.acmicpc.net 설계 주어진 정수 N에 대해 1부터 N까지의 모든 숫자를 사용하여 만들 수 있는 모든 순열을 생성하고 출력 순열 : N개의 숫자를 일렬로 나열하는 것 모든 숫자는 한 번씩만 나타나야 하며, 순서에 따라 다른 순열이 됨 permutate라는 재귀 메소드를 사용하여 가능한 모든 조합을 시도하고, 이미 사용한 숫자는 visited 배열을 통해 체크 각 순열이 완성될 때마다 이를 출력하며, 모든 순열을 찾을 때까지 이 과정을 반복 구현 코드 // package boj10974; // 패키지 선언 // import java.util.Arrays; // 자바 유틸..

Problem_Solving 2024.01.04

백준(BOJ) 14889 : 스타트와 링크 (자바, JAVA)

14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 설계 N명의 사람을 두 팀으로 나누어, 각 팀의 능력치 합의 차이가 최소가 되도록 팀을 구성하는 문제를 해결. 사람들 간의 능력치는 2차원 배열 arr에 저장되며, 각 팀 구성은 boolean 배열 tmp로 나타냄. combinate 메소드는 재귀적으로 모든 팀 조합을 생성하고, 각 조합에 대한 능력치 차이를 계산하여 최소 차이 power를 찾음. 코드 실행이 완료되면, 최소 능력치 차이를 출력. 구현 코드 // package boj14889; // 패키지 선언 // import ja..

Problem_Solving 2024.01.04

프로그래머스 : 쿼드압축 후 개수 세기 (자바, JAVA)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 2D 배열에서 특정 조건에 따라 배열을 작은 단위로 나눔 각 부분의 합이 전체가 0인지, 1인지를 판단하여 해당 부분을 처리 이 과정에서 0과 1의 개수를 세어 answer 배열에 저장하고 반환 구현 코드 // package pg68936; import java.util.*; public class Solution { // 메인 메소드 public static void main(String[] args) { int[][] input = { { 1, 1, 0, 0 }, { 1, 0, 0, 0 }, { 1,..

Problem_Solving 2024.01.04

프로그래머스 : 거리두기 확인하기 (자바, JAVA)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 주어진 장소 배열(places)에 대한 거리두기 규칙 준수 여부를 검사 각 장소 배열은 5x5 크기의 문자 배열로, 각 문자는 ‘P’, ‘O’, ‘X’ 중 하나 solution 메소드는 각 장소 배열에 대해 search 함수를 호출하여 거리두기 준수 여부를 확인하고, 이를 결과 배열에 저장 search 함수는 각 위치를 순회하며, ‘P’(사람이 있는 자리) 주변에 다른 ‘P’가 규정된 거리 안에 있는지 검사 위반 사항이 있으면 즉시 0을 반환하고, 모든 위치가 규칙을 준수하면 1을 반환 구현 코드 // ..

Problem_Solving 2024.01.04