순열 7

백준(BOJ) 28075 : 스파이 (실버3) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/280753줄 요약이 문제는 N일 동안 A와 B 두 곳을 방문하는 모든 경우의 수를 구하는 문제로, 중복순열(Permutation with Repetition)을 활용하여 해결할 수 있습니다.중복순열은 순서를 고려하며, 같은 요소를 여러 번 선택할 수 있는 경우의 수를 의미합니다.이 문제에서는 각 일자마다 A 또는 B 중 하나를 선택하며, 이전에 선택한 장소와 같은 장소를 다시 선택할 수 있습니다.재귀 함수 recursiveSearch를 사용하여 중복순열을 생성하며, 각 경우에서 얻을 수 있는 진척도의 합을 계산합니다.재귀 함수의 매개변수로는 현재 방문 중인 일자(day), 이전에 방문한 장소(prev), 현재까지 누적된 진척도(progress..

Problem_Solving 2024.05.12

백준(BOJ) 10819 : 차이를 최대로 (실버2) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/108193줄 요약정수의 개수 N과 N개의 정수로 이루어진 배열 A를 입력받습니다.백트래킹을 활용하여 재귀 함수를 사용해 순열을 생성하고, 생성된 순열에 대해 인접한 요소의 차이의 절댓값의 합을 계산합니다.백트래킹은 모든 경우의 수를 탐색하되, 조건에 맞지 않는 경우는 더 이상 탐색하지 않고 가지치기하는 기법입니다.이 문제에서는 순열을 생성하는 과정에서 백트래킹을 적용합니다. 재귀 함수에서 현재 선택한 요소를 배열 B에 저장하고, 다음 요소를 선택할 때는 이전에 선택한 요소를 제외하고 선택합니다.만약 현재 선택한 요소로 인해 순열을 완성할 수 없는 경우, 해당 요소를 선택하지 않고 백트래킹하여 다른 요소를 선택합니다. 이를 통해 불필요한 탐색을..

Problem_Solving 2024.05.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) 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