완전탐색 36

백준(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) 15658 : 연산자 끼워넣기 (2) (실버2) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/156583줄 요약수의 개수 N, 수열 A, 그리고 사용 가능한 연산자의 개수를 입력받습니다.백트래킹을 활용하여 재귀 함수를 통해 연산자를 배치하는 모든 경우를 탐색하고, 각 경우에 대해 연산 결과를 계산합니다.재귀 함수에서는 현재 배치한 연산자의 개수를 저장하는 배열 visited를 사용하여 연산자를 배치하고, 배치된 연산자에 따라 연산을 수행합니다.연산자 배치가 완료되었을 때, 연산 결과를 최댓값과 최솟값과 비교하여 갱신합니다.백트래킹을 적용하여 현재 배치한 연산자로 인해 더 이상 탐색할 필요가 없는 경우, 해당 연산자를 배치하지 않고 다른 연산자를 배치하도록 합니다.모든 경우를 탐색한 후, 최댓값과 최솟값을 출력합니다. 이 문제에서는 백트..

Problem_Solving 2024.05.11

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

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

Problem_Solving 2024.05.10

프로그래머스 : 이진 변환 반복하기 (자바, 파이썬)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 문자열 s를 이진 변환하는 과정을 거쳐, 모든 0을 제거하고, 남은 1들의 개수에 대한 이진수로 변환하는 과정을 반복 각 변환 과정에서 제거된 0의 개수와 변환 횟수를 계산하여 반환. 이진 변환 과정은 문자열을 순회하면서 0을 제거하고, 남은 1의 개수를 이진수 형태로 변환하는 방식으로 진행. while 반복문을 사용하여 주어진 조건이 충족될 때까지 변환 과정을 반복하고, Integer.toBinaryString 메서드를 활용하여 정수를 이진수 문자열로 변환. 구현 코드 자바(Java) // packag..

Problem_Solving 2024.01.23

프로그래머스 : 짝지어 제거하기 (자바, 파이썬)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 문자열에서 같은 알파벳이 연속으로 나타나는 쌍을 제거 주어진 문자열 s를 순회하면서, 각 문자를 리스트에 추가 리스트에 이미 문자가 있고, 그 문자가 현재 문자와 같으면 연속된 쌍이므로 리스트에서 마지막 문자를 제거 문자열의 모든 문자를 처리한 후, 리스트가 비어 있으면 모든 연속 쌍이 제거된 것이므로 1을 반환하고, 그렇지 않으면 0을 반환 구현 코드 자바(Java) // package pg12973; import java.util.*; public class Solution { // public st..

Problem_Solving 2024.01.22

백준(BOJ) 1157 : 단어 공부 (자바, 파이썬)

1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 설계 입력된 문자열에서 가장 많이 사용된 알파벳 문자를 찾고, 만약 가장 많이 사용된 문자가 여러 개라면 물음표(?)를 출력합니다. 각 문자의 빈도를 계산하기 위해 int 배열을 사용합니다. 각 문자는 ‘A’에서 ‘Z’ 사이의 값으로 변환되어 해당 인덱스의 빈도를 증가시킵니다. 이후 가장 빈도가 높은 문자를 찾고, 동일한 빈도를 가진 다른 문자가 존재하는 경우 물음표(?)를 출력합니다. 구현 코드 자바(Java) // package boj1157; import java.util.*; public..

Problem_Solving 2024.01.21

백준(BOJ) 1181 : 단어 정렬 (자바, 파이썬)

1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 설계 주어진 단어들을 길이가 짧은 순으로, 길이가 같을 경우 사전 순으로 정렬 주어진 단어들을 HashSet을 사용하여 중복을 제거한 뒤, 배열로 변환 그 후, Arrays.sort 메소드와 람다식을 사용하여 단어들을 길이 순으로 정렬 길이가 같은 경우에는 사전 순으로 정렬 정렬된 단어들은 반복문을 통해 출력 구현 코드 자바(Java) // package boj1181; import java.util.*; import java.io.*; public ..

Problem_Solving 2024.01.20

백준(BOJ) 11650 : 좌표 정렬하기 (자바, 파이썬)

11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 설계 2차원 좌표를 입력받아 x좌표가 증가하는 순으로, x좌표가 같을 경우 y좌표가 증가하는 순으로 정렬 Arrays.sort 메소드와 람다식을 사용하여 좌표를 정렬 먼저 x좌표에 따라 정렬하고, x좌표가 같은 경우에는 y좌표에 따라 정렬 정렬된 좌표는 반복문을 통해 출력 구현 코드 자바(Java) // package boj11650; import java.util.Arrays; import java.util...

Problem_Solving 2024.01.19

백준(BOJ) 10814 : 나이순 정렬 (자바, 파이썬)

10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 설계 나이와 이름이 주어졌을 때 나이 순으로 정렬 나이와 이름을 각각 별도의 배열에 저장한 후, 인덱스 배열을 사용하여 나이 순으로 정렬 나이가 같은 경우에는 가입 순서(입력 순서)대로 정렬 정렬된 순서대로 나이와 이름을 출력하여 최종 결과를 도출 이러한 접근 방식은 나이와 이름이 별도의 배열에 저장되어 있기 때문에, 인덱스를 사용하여 두 배열을 연결하는 방식으로 구현 구현 코드 자바(Java) // package boj10814; import java.util.*; ..

Problem_Solving 2024.01.18

프로그래머스 : 문자열 압축 (자바, 파이썬)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 주어진 문자열을 여러 길이 단위로 잘라서 각 단위별로 압축한 후 가장 짧은 압축 길이를 찾습니다. 문자열 압축 과정에서 동일한 문자열이 반복되는 경우 숫자를 이용하여 압축하고, 그렇지 않은 경우 원본 문자열을 사용합니다. 압축된 문자열의 최소 길이를 찾기 위해 모든 가능한 단위를 탐색하며, 각 단위별로 압축된 문자열의 길이를 계산하여 최소 길이를 갱신합니다. 구현 코드 자바(Java) class Solution { public int solution(String s) { // 최솟값을 구하는 문제 // ..

Problem_Solving 2024.01.16