본문 바로가기

코딩테스트 준비624

[백준] 17413번 - 단어 뒤집기 2 [Java] https://www.acmicpc.net/problem/17413 1.  아이디어 StringTokenizer와 StringBuilder의 조합으로 해결할 수 있다.2. 문제풀이 태그 사이의 단어들은 그대로 태그 밖의 단어들은 역순으로 출력해야한다. 먼저 태그를 구분자로 하고 구분자까지 포함하는 StringTokenizer로 입력을 받았다. 토큰에서 열린 태그를 발견했을 경우 다음 토큰은 태그의 단어가 되고 그 다음 토큰은 닫는 태그가 되므로 총 3개의 토큰을 StringBuilder에 넣어줬다. 만약 토큰이 열린 태그가 아닌 경우 해당 토큰은 태그 밖 단어들이 되므로 다시 이 토큰을 공백을 구분자로 하는 StringTokenizer로 파싱한 후 StringBuilder의 reverse 메서드로 뒤집어.. 2025. 1. 14.
[백준] 2999번 - 비밀 이메일 [Java] https://www.acmicpc.net/problem/2999 1.  아이디어 2차원 배열을 활용해서 복호화하는 방식으로 해결할 수 있다.2. 문제풀이 먼저 모듈러 연산을 활용해서 R과 C를 구해야 한다. 이때 R이 C보다 작거나 같아야 해서 반복문의 종료조건에 i*i를 사용했다. R과 C를 구했으면 2차원 배열을 선언한 후 열 우선 순회를 하며 문자들을 채워주고 다시 행 우선 순회를 하면 문자열을 구할 수 있다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputSt.. 2025. 1. 14.
[백준] 28702번 - FizzBuzz [Java] https://www.acmicpc.net/problem/28702 1.  아이디어 FizzBuzz 문제에서 연속으로 세 수가 모두 숫자가 아닐 수 없다.2. 문제풀이 3의 배수면서 5의 배수가 아닌 Fizz, 5의 배수면서 3의 배수가 아닌 Buzz, 3의 배수면서 5의 배수인 FizzBuzz는 3가지가 연속으로 등장할 수 없다. 이를 활용해 세가지 입력값 중 숫자가 등장한 경우를 isNumber 메서드로 찾은 후 해당 숫자의 위치로 연속으로 출력된 세 개의 문자열 다음에 올 숫자를 구한다. 해당 숫자가 다시 3의 배수, 5의 배수인지 여부를 getFizzBuzzNumber 메서드로 판단해서 출력하도록 구현했다.3. 코드 import java.io.*;public class Main { publi.. 2025. 1. 14.
[백준] 5635번 - 생일 [Java] https://www.acmicpc.net/problem/5635 1.  아이디어 학생을 클래스로 만들고 Comparator 인터페이스를 구현하면 학생의 생일로 정렬할 수 있다.2. 문제풀이 연도를 먼저 비교하고 이후 월, 이후 일을 비교하면 나이순으로 정렬할 수 있다. 학생 클래스에서 compareTo 메서드로 구현한 후 학생 배열을 정렬하면 배열의 가장 앞과 가장 뒤에 나이가 가장 적은 사람과 나이가 가장 많은 사람이 오게 된다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class Student implements Comparable { String name; int day; .. 2025. 1. 14.
[백준] 11098번 - 첼시를 도와줘! [Java] https://www.acmicpc.net/problem/11098 1.  아이디어 선수를 클래스로 만들고 Comparator 인터페이스를 구현하면 선수의 가격으로 정렬할 수 있다.2. 문제풀이 선수 객체 배열에 선수를 넣고 정렬한 후 맨 앞에 가장 비싼 선수가 오도록 compareTo 메서드를 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class Player implements Comparable { int value; String name; public Player(int value, String name) { this.value = v.. 2025. 1. 14.
[백준] 6996번 - 애너그램 [Java] https://www.acmicpc.net/problem/6996 1.  아이디어 애너그램은 두 문자열에 등장한 각 알파벳의 개수가 동일함을 이용해서 해결할 수 있다.2. 문제풀이 알파벳 소문자가 등장한 개수를 기록하는 카운팅 배열을 선언해서 A 단어에 등장한 알파벳의 개수를 더해주고 B 단어에 등장한 알파벳의 개수를 빼줬다. 두 단어가 애너그램 관계라면 카운팅 배열의 모든 값이 0이어야 함을 이용해서 구현했고 반복문 라벨링을 활용해서 바로 빠져나오게 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { Buffe.. 2025. 1. 14.
[백준] 11944번 - NN [Java] https://www.acmicpc.net/problem/11944 1.  아이디어 StringBuilder와 substring 메서드를 활용해서 해결할 수 있다.2. 문제풀이 N을 N번 출력하되 해당 길이가 M보다 길 경우 M자리까지만 출력해야 한다.일단 N을 N번 StringBuilder에 넣은 후 substring 메서드와 Math.min 메서드로 전체 길이와 M 중 작은 값만 출력하도록 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader.. 2025. 1. 14.
[백준] 2357번 - 최솟값과 최댓값 [Java] https://www.acmicpc.net/problem/2357 1.  아이디어 구간에 대한 최솟값과 최댓값을 반복적으로 구해야한다는 점에서 세그먼트 트리를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 세그먼트 트리 클래스를 구현한 후 입력 값을 기반으로 세그먼트 트리를 생성해서 반복문으로 쿼리를 처리하는 방식으로 구현했다.세그먼트 트리는 최솟값과 최댓값을 모두 처리하기 위해 minTree와 maxTree를 생성해서 각각 초기화했고 쿼리에 대해 minTree 쿼리와 maxTree 쿼리를 각각 처리해서 StringBuilder로 합쳐서 반환하는 방식으로 구현했다. 쿼리에서 구간이 벗어나는 경우 포함하지 않는다는 의미로 minTree는 Integer.MAX_VALUE를, maxTree는 Interger.. 2025. 1. 14.
[백준] 10868번 - 최솟값 [Java] https://www.acmicpc.net/problem/10868 1.  아이디어 구간에 대한 최솟값을 반복적으로 구해야한다는 점에서 세그먼트 트리를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 세그먼트 트리 클래스를 구현한 후 입력 값을 기반으로 세그먼트 트리를 생성해서 반복문으로 쿼리를 처리하는 방식으로 구현했다.세그먼트 트리는 구간의 최솟값을 구해야하므로 자식 노드 중 최솟값을 저장하도록 초기화 및 쿼리를 짰다. 쿼리에서 구간이 벗어나는 경우 포함하지 않는다는 의미로 Integer.MAX_VALUE를 반환해서 한다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class SegmentTree { .. 2025. 1. 14.
[백준] 11505번 - 구간 곱 구하기 [Java] https://www.acmicpc.net/problem/11505 1.  아이디어 구간에 대한 곱을 반복적으로 구해야하고 특정 위치의 값을 변경하는 상황도 있다는 점에서 세그먼트 트리를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 세그먼트 트리 클래스를 구현한 후 입력 값을 기반으로 세그먼트 트리를 생성해서 반복문으로 쿼리를 처리하는 방식으로 구현했다.세그먼트 트리는 구간 곱을 구해야하므로 자식 노드의 곱을 저장하도록 초기화 및 쿼리를 짰다. 쿼리에서 구간이 벗어나는 경우 포함하지 않는다는 의미로 1을 반환해서 한다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class SegmentTree { .. 2025. 1. 14.
[백준] 1275번 - 커피숍2 [Java] https://www.acmicpc.net/problem/1275 1.  아이디어 구간에 대한 합을 구한 뒤 값을 변경하는 과정을 반복한다는 점에서 세그먼트 트리로 해결할 수 있다.2. 문제풀이 세그먼트 트리 클래스를 구현한 후 입력 값을 기반으로 세그먼트 트리를 생성해서 반복문으로 쿼리를 처리하는 방식으로 구현했다.세그먼트 트리는 구간 합을 구해야하므로 자식 노드의 합을 저장하도록 초기화 및 쿼리를 짰다. 쿼리에서 구간이 벗어나는 경우 포함하지 않는다는 의미로 0을 반환해서 한다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class SegmentTree { private final int N.. 2025. 1. 14.
[백준] 2042번 - 구간 합 구하기 [Java] https://www.acmicpc.net/problem/2042 1.  아이디어 구간에 대한 합을 반복적으로 구해야하고 특정 위치의 값을 변경하는 상황도 있다는 점에서 세그먼트 트리를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 세그먼트 트리 클래스를 구현한 후 입력 값을 기반으로 세그먼트 트리를 생성해서 반복문으로 쿼리를 처리하는 방식으로 구현했다.세그먼트 트리는 구간 합을 구해야하므로 자식 노드의 합을 저장하도록 초기화 및 쿼리를 짰다. 쿼리에서 구간이 벗어나는 경우 포함하지 않는다는 의미로 0을 반환해서 한다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class SegmentTree { .. 2025. 1. 14.