알고리즘 72

백준(BOJ) 2501 : 약수 구하기 (자바, JAVA)

2501번: 약수 구하기 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. www.acmicpc.net 설계 주어진 자연수 N의 K번째 약수를 찾는 문제를 해결 N의 모든 약수를 찾아 measure 리스트에 저장 리스트의 크기와 K를 비교하여 K번째 약수가 존재하는지 확인하고, 존재한다면 해당 약수를 출력 만약 K번째 약수가 존재하지 않는다면(즉, 약수의 개수가 K보다 작다면) 0을 출력 구현 코드 // package boj2501; // 패키지 선언 import java.util.ArrayList; // ArrayList 클래스 사용을 위한 import import java.util.List; // List 인터페이스 사용을 위한 im..

Problem_Solving 2024.01.02

백준(BOJ) 6603 : 로또 (자바, JAVA)

6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 설계 로또 번호들을 입력 받아 가능한 모든 조합을 출력 사용자로부터 입력받은 숫자들 중 6개를 선택하는 모든 조합을 찾아서 출력하는데, 입력이 ‘0’일 때 프로그램을 종료 combinate 함수는 재귀적으로 조합을 생성하며, 각 단계에서 숫자를 선택하거나 선택하지 않는 두 가지 경우를 고려하여 모든 가능한 조합을 탐색 구현 코드 // package boj6603; // 패키지 선언 // import java.util.Arrays; // Arrays 클..

Problem_Solving 2023.12.29

백준(BOJ) 2775 : 부녀회장이 될테야 (자바, JAVA)

2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다 www.acmicpc.net 설계 주어진 층(k)과 호(n)에 살아야 하는 사람 수를 계산하는 문제를 해결. 각 층의 각 호에 필요한 사람 수는 그 아래 층의 1호부터 해당 호까지 사는 사람들의 합과 같음. 0층의 i호에는 i명이 살고 있으므로, 이 정보를 시작으로 각 층과 호에 대해 필요한 사람 수를 계산해 나감. guess 함수는 이러한 계산 과정을 반복하여 k층 n호에 필요한 사람 수를 구하고 반환. 구현 코드 // package boj2775; // 패키지 선언 import java.util.Arrays; // Arrays..

Problem_Solving 2023.12.29

백준(BOJ) 10973 : 이전 순열 (자바, JAVA)

10973번: 이전 순열 첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 설계 주어진 순열에서 바로 이전 순열로 변경할 위치를 찾은 후, 해당 위치와 교환할 숫자를 찾아 순열을 변경 순열 변경은 주어진 순열을 뒤에서부터 탐색하여 처음으로 내림차순이 끝나는 위치를 찾고, 그 위치의 바로 앞 숫자와 교환할 숫자를 찾아 순열을 변경하는 방식으로 진행 변경된 순열의 뒷부분은 내림차순으로 정렬하여 이전 순열을 완성 구현 코드 // package boj10973; // 패키지 선언 import java.util.ArrayList; // ArrayList 사용을 위한 import import java.u..

Problem_Solving 2023.12.28

백준(BOJ) 10819 : 차이를 최대로 (자바, JAVA)

10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 설계 주어진 배열 A의 모든 순열을 생성하고, 각 순열에 대해 인접한 원소들의 차이의 절대값의 합을 계산하여 그 합이 최대가 되는 순열을 찾음 순열을 생성하는 permutate 메소드는 재귀적으로 배열의 각 위치에 들어갈 수 있는 숫자를 시도하면서 순열을 완성 각 단계에서 사용되지 않은 숫자를 찾아 순열의 현재 위치에 넣고, 다음 위치를 채우기 위해 다시 자기 자신을 호출 (재귀 호출) 이 과정을 모든 위치가 채워질 때까지 반복하며, 완성된 순열은 permutation 리스트에..

Problem_Solving 2023.12.27

백준(BOJ) 2529 : 부등호 (자바, JAVA)

2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net 설계 주어진 k개의 부등호 문자열을 만족하는 k+1 자리의 수를 찾는 문제를 해결. 각 숫자 위치에 0부터 9까지 가능한 숫자를 대입하면서 부등호 조건을 만족하는지 확인하고, 모든 조건을 만족하는 숫자 배열을 결과 리스트에 추가. 최종적으로 결과 리스트에 저장된 모든 배열을 문자열로 변환하여 숫자를 비교하고, 가능한 최대값과 최소값을 출력. 재귀 함수를 사용하여 가능한 모든 숫자 조합을 탐색하는데, 각 단계마다 사용한 숫자를 체크하고 부등호 조건을 만족하는지 확인. 탐색이 ..

Problem_Solving 2023.12.26

백준(BOJ) 9095 : 1, 2, 3 더하기 (자바, JAVA)

9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 설계 정수 n을 입력 받아, 1, 2, 3의 합으로 n을 만드는 모든 경우의 수를 찾아 문제를 해결. 재귀 함수는 종료 조건에 도달할 때까지 자기 자신을 호출하며 문제의 규모를 점차 줄여 나가는 구조. 재귀적으로 문제를 해결하는 과정에서 n이 0이 될 때마다 하나의 유효한 조합을 찾은 것으로 간주하고 결과를 카운트 재귀 호출은 1, 2, 3을 각각 n에서 빼는 것을 반복하며, 각 단계에서 가능한 모든 경우의 수를 탐색. 구현 코드 // package boj9095; // 패키지 선언 import java.util.Scanner; // Scanner 클래스 임포..

Problem_Solving 2023.12.25

프로그래머스 : 삼각 달팽이 (자바, JAVA)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 좌측하단, 우측, 좌측 상단으로 움직이는 3가지의 움직임 경우의 수를 각기 구현 개수가 정해져 있지 않은 경우이므로, Array 대신 List를 사용하여 구현 get, add, addAll 등 list의 메소드들을 적절히 사용 구현 코드 //package pg68645; // 패키지 선언 import java.util.ArrayList; // ArrayList 사용을 위한 import // import java.util.Arrays; // Arrays 사용을 위한 import import java.uti..

Problem_Solving 2023.12.25

백준(BOJ) 16945 : 매직 스퀘어로 변경하기 (자바, JAVA)

16945번: 매직 스퀘어로 변경하기 1부터 N2까지의 수가 하나씩 채워져 있는 크기가 N×N인 배열이 있고, 이 배열의 모든 행, 열, 길이가 N인 대각선의 합이 모두 같을 때, 매직 스퀘어라고 한다. 크기가 3×3인 배열 A가 주어졌을 때, www.acmicpc.net 설계 3 x 3 매직 스퀘어(마방진)을 만족시키는 2차원 배열 목록을 만든다. 입력 받은 배열을 정답 배열과 비교하면서 가장 적은 비용을 확인한다. 구현 코드 // package boj16945; // 패키지 선언 import java.util.Scanner; // 사용자 입력을 위한 Scanner 클래스 임포트 // import java.util.Arrays; // 배열을 문자열로 출력하기 위해 Arrays 클래스 임포트 public..

Problem_Solving 2023.12.25

프로그래머스 : 행렬의 곱셈 (자바, JAVA)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 행렬 내적은 두 개의 행렬을 곱하는 연산으로, 주어진 두 행렬 A와 B가 있을 때, 결과 행렬 C를 계산하는 방법이다. 이때 A의 열의 수와 B의 행의 수가 일치해야 한다. 먼저, 주어진 두 행렬 A와 B가 다음과 같다고 가정해 본다면, 결과 행렬 C는 m x p 크기를 가지게 된다. 행렬 C의 각 원소 cij는 다음과 같이 계산된다. 코드에서는 이러한 원리를 기반으로 중첩된 반복문을 사용하여 각 원소를 계산하고 결과 배열 C에 저장. 각 원소 cij는 A의 행 i1과 B의 열 j2를 곱한 값들을 모두 ..

Problem_Solving 2023.12.25