전체 글 402

[백준] 14659번: 한조서열정리하고옴ㅋㅋ (브론즈1, 그리디 알고리즘, 50%~53% 시간초과, JAVA)

문제 링크 : https://www.acmicpc.net/problem/14659 [백준] 14659번: 한조서열정리하고옴ㅋㅋ (브론즈1, 그리디 알고리즘, 50%~53% 시간초과, JAVA) 문제의 요약은 아래와 같습니다. "자신보다 낮은 봉우리에 서있는 적들만 처치할 수 있게 되었다" → 현재 위치의 값보다 오른쪽의 값이 낮다면 적을 처치함 "출발한 봉우리보다 높은 봉우리를 만나면 그대로 공격을 포기" → 오른쪽 값이 높다면 그 이후의 값은 보지 않음 "모든 용들은 오른쪽으로만 나아가며" → 오른쪽의 값만을 확인 "봉우리의 높이는 중복 없이 유일하다." → 같은 높이의 값을 존재하지 않음 처음에 시도할 때의 코드인데, 각각의 값들을 비교하고 오른쪽의 값이 더 낮다면 적을 처치(kill)하고, 더 높은..

[Algorithm] 완전 탐색, 브루트포스 알고리즘 (Brute Force)

[Algorithm] 완전 탐색, 브루트포스 알고리즘 (Brute Force) 완전 탐색, 브루트포스 알고리즘은 이름 그대로 모든 경우를 탐색하여 답을 도출하는 알고리즘입니다. 이러한 특징 때문에 정답을 당연히 찾아 맞출수는 있지만, 모든 경우를 탐색하는 만큼 정답이 도출될 때 까지의 시간은 장담할 수 없는 큰 단점이 있습니다. 즉, 시간 복잡도가 매우 큽니다. 즉, 만약 123456789라는 정답이 있을 경우 아래와 같이 동작하게 되는 알고리즘 입니다. 숫자 1 탐색 숫자 2 탐색 숫자 3 탐색 .... 숫자 123456787 탐색 숫자 123456788 탐색 숫자 123456789 탐색 후 정답 도출 이러한 특징으로 인해 브루트포스 알고리즘의 경우 대부분 무한 루프, 중첩되는 for문과 if문을 조합..

[백준] 1145번: 적어도 대부분의 배수 (브론즈1, 브루트포스 알고리즘, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1145 [백준] 1145번: 적어도 대부분의 배수 (브론즈1, 브루트포스 알고리즘, JAVA) 해당 문제는 입력받은 5개의 숫자 중, 3개 이상이 공통적으로 가지는 배수를 찾아내는 브루트포스(완전탐색) 문제 입니다. 우선 사용자로부터 입력받은 후 오름차순으로 정렬하고 최솟값을 가지는 0번 인덱스에서 부터 무한루프를 사용하여 탐색을 시작합니다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuil..

[백준] 1253번: 좋다 (골드4, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1253 [백준] 1253번: 좋다 (골드4, JAVA) 우선 아래의 코드를 사용하여 사용자로부터 입력을 받고 배열로 변환 합니다. 단, 문제를 풀 때 수월하게 풀기 위해서 따로 원본 배열과 사본 배열을 생성하고 사본 배열을 오름차순 정렬하였습니다. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); String input = br.readLine(); sb.append(input); // 스트링 배열로 변환 S..

[백준] 11399번: ATM (실버4, JAVA)

문제 링크 : https://www.acmicpc.net/problem/11399 11399번: ATM (실버4, JAVA) 사용자가 입력한 값을 String 배열로 받고 int 배열로 변환 후, 필요한 시간의 최솟값을 구해야하기 때문에 오름차순으로 정렬합니다. import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] arr = new int[N]; sc.nextLine(); String[] str = sc.nextLine().split(" "); ..

카테고리 없음 2023.12.19

[백준] 2839, 10162번: 설탕 배달, 전자레인지(실버4, 브론즈3, JAVA)

문제 링크(2839) : https://www.acmicpc.net/problem/2839 문제 링크(10162) : https://www.acmicpc.net/problem/10162 [백준] 2839번: 설탕 배달 (실버4, JAVA) 봉지의 최수 개수(divide)를 선언하고 사용자의 입력(N)을 받은 후 dfs 메소드를 호출합니다. public class Main { int divide; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); Main main = new Main(); main.dfs(N); } 문제에서 주어진 내용에서 중요한 부분은 `최대한 적은 봉지를 들고..

[백준] 2720번: 세탁소 사장 동혁 (브론즈3, JAVA)

문제 링크 : https://www.acmicpc.net/problem/2720 [백준] 2720번: 세탁소 사장 동혁 (브론즈3, JAVA) 아래의 코드는 dfs 메소드를 구현하기 전 입니다. 거스름돈을 몇개 받았는지 확인할 쿼터, 다임, 니켈, 페니의 인스턴스 변수를 생성하고, 사용자로부터 테스트 케이스 수(T)와 거스름돈(C)를 입력받고 dfs 메소드를 실행합니다. public class Main { int quarter; int dime; int nickel; int penny; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); Main main = new Main();..

[백준] 1026번: 보물 (실버4, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1026 1026번: 보물 (실버4, JAVA) 해당 문제는 (낮은 A값) * (높음 B값) 을 반복하며 계산하면 S의 최솟값을 구할 수 있습니다. 다만 이 문제에서는 함정(?)이 있는데 B에 있는 수는 재배열을 하면 안된다고 적혀있지만, 채점기에서는 B의 수를 재배열 했는지 판단을 할수가 없어서 재배열하고 문제를 풀어도 통과됩니다(......) 반환할 변수 S를 선언 및 초기화 하고, 사용자로부터 숫자를 입력 받습니다. 단, 숫자를 입력 받을 때 공백을 기준으로 String 배열로 만든 후 int 배열로 변환 합니다. BufferedReader br = new BufferedReader(new InputStreamReader(Sys..

[프로그래머스] 문제 풀이할 때 사용한 메소드 정리 (계속 추가 예정)

[프로그래머스] 문제 풀이할 때 사용한 메소드 정리 (계속 추가 예정) new StringBuilder(new String("char배열")).reverse().toString(); → new String("char배열") : char배열을 참고하여 String 객체로 생성 → .reverse() : 문자열을 뒤집어주는 StringBuilder의 메소드 → toString() : String 타입으로 변환 → 활용한 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12933 (long)Math.sqrt(121); → 숫자 121의 제곱근을 구하는 메소드 (값 : 11) → 활용한 문제 : https://school.programmers.co..

[백준] 1075번: 나누기 (브론즈2, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1075 [백준] 1075번: 나누기 (브론즈2, JAVA) 스캐너로 입력받아 정수 N은 nStr, 정수 F는 f 변수로 입력을 받은 후 입력받은 nStr의 값을 char 배열로 변경 합니다. 이후 변경된 char 배열을 가지고 가장 뒤에 있는 숫자 두개를 0으로 변경했습니다. Scanner sc = new Scanner(System.in); String nStr = sc.nextLine(); int f = sc.nextInt(); char[] arrCh = nStr.toCharArray(); arrCh[arrCh.length-1] = '0'; arrCh[arrCh.length-2] = '0'; 다음으로는 char 배열을 다시 int..