본문 바로가기

코딩테스트 준비612

[백준] 23304번 - 아카라카 [Java] https://www.acmicpc.net/problem/23304 1.  아이디어 StringBuilder의 reverse 메서드로 팰린드롬 여부를 간단하게 확인할 수 있다.2. 문제풀이 팰린드롬 여부를 파악하는 isPalidrome 메서드와 아카라카 팰린드롬 여부를 파악하는 isAkarakaPalidrome 메서드를 작성했다.아카라카 팰린드롬은 주어진 문자열이 팰린드롬이어야 하고 접두사와 접미사가 아카라카 팰린드롬이어야 한다.이 세 가지 조건을 AND 연산자로 묶어서 boolean 타입으로 반환하게 작성해서 판단할 수 있게 했고 아카라카 팰린드롬이 재귀로 이어지므로 종료 조건만 잘 신경써서 구현했다.3. 코드 import java.io.*;public class Main { public stat.. 2025. 1. 11.
[백준] 16430번 - 제리와 톰 [Java] https://www.acmicpc.net/problem/16430 1.  아이디어 A와 B가 서로소면 B-A와 B도 서로소가 된다.2. 문제풀이 1 - A/B = (B-A)/B 인데 B-A와 B가 서로소라 기약분수가 되므로 간단하게 해결할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new O.. 2025. 1. 11.
[백준] 1647번 - 도시 분할 계획 [Java] https://www.acmicpc.net/problem/1647 1.  아이디어 마을을 두 개의 분리된 마을로 두면서 남은 길의 유지비의 합이 최소가 될 때는 마을이 최소 스패닝 트리를 이루기 직전일 때다.2. 문제풀이 마을이 최소 스패닝 트리를 이루면 하나의 마을이면서 유지비가 최소가 되므로 여기서 가장 유지비가 많이드는 경로 하나만 없다면 마을은 두 개로 나누어진다. 이를 활용해서 크루스칼 알고리즘으로 마을을 최소 스패닝 트리로 만드는데 경로의 개수가 N - 2개일 때 종료하는 방식으로 구현했다. 다만 N이 처음부터 2일 수 있어서 평소와 달리 먼저 경로의 개수를 비교하는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main {.. 2025. 1. 10.
[백준] 17478번 - 재귀함수는 뭔가요? [Java] https://www.acmicpc.net/problem/17478 1.  아이디어 StringBuilder를 활용해서 재귀 과정에서 생성되는 문자열을 저장한 후 출력했다.2. 문제풀이 아래 문장은 재귀와 관계 없이 한번만 등장해서 StringBuilder의 생성자로 담아줬다.어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다. 재귀의 종료조건은 depth가 N이 될 때로 설정했고 depth에 따라 언더바를 넣어야하므로 StringBuilder에 이를 넣는 underLine 메서드를 활용해서 구현했다.3. 코드 import java.io.*;public class Main { private static final StringBuilder sb = new StringBuilder("어느 한 컴.. 2025. 1. 10.
[백준] 1629번 - 곱셈 [Java] https://www.acmicpc.net/problem/1629 1.  아이디어 A^B % C를 구하는 문제로 B가 짝수면 A^B = (A^(B/2)) * (A^(B/2)), B가 홀수면 A^B = (A^(B/2)) * (A^(B/2)) * B인 점을 이용하면 B가 큰 수여도 빠르게 계산할 수 있다.2. 문제풀이 아이디어의 연산이 B/2에 대해서도 똑같이 반복되므로 이를 재귀 함수로 구현했다. B가 자연수이므로 재귀과정에서 B가 1이 될때가 종료조건이 되고 짝수, 홀수 여부에 따라 재귀를 해주면 된다. 이때 오버플로우가 발생할까봐 long 타입으로 처리를 했고 중간중간 C로 모듈러 연산을 해줘서 long 타입으로 선언해도 오버플로우가 발생할 수 있는 부분을 방지했다.3. 코드 import java.io.. 2025. 1. 10.
[백준] 1780번 - 종이의 개수 [Java] https://www.acmicpc.net/problem/1780 1.  아이디어 이전 색종이 만들기에서 4등분이 9등분으로 바뀐 문제로 재귀 과정에서 각 꼭짓점 설정만 바꿔주면 간단하게 해결할 수 있다.([코딩테스트 준비/백준] - [백준] 2630번 - 색종이 만들기 [Java])2. 문제풀이 아이디어 그대로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static int[][] map; private static int cntMinus = 0; private static int cntZero = 0; private static int cntPlus = 0; public static v.. 2025. 1. 9.
[백준] 2630번 - 색종이 만들기 [Java] https://www.acmicpc.net/problem/2630 1.  아이디어 현재 바라보는 색종이의 영역을 4등분하는 재귀 함수와 현재 영역이 같은 색으로 이루어져 있는지 판단하는 메서드의 조합으로 해결했다.2. 문제풀이 재귀 함수는 현재 바라보는 색종이의 왼쪽 위와 오른쪽 아래 좌표(영역 바깥)를 파라미터로 받는다. 이후 해당 영역이 같은 색으로 이루어져 있는지 hasManyColor라는 boolean을 반환하는 메서드로 확인한 후 여러 색으로 이루어져 있으면 색종이를 4등분해서 재귀를 다시 도는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static final int WHITE = 0; .. 2025. 1. 9.
[백준] 1269번 - 대칭 차집합 [Java] https://www.acmicpc.net/problem/1269 1.  아이디어 두 차집합의 크기의 합은 두 집합의 크기 - 2 * 교집합의 크기다.2. 문제풀이 Set의 retainAll 메서드로 교집합을 구할 수 있다. 두 집합 A, B를 HashSet으로 구현한 후 intersection이라는 교집합을 만들었다. 교집합은 생성자에 A를 넣은 후 retainAll(B)를 해주면 간단하게 구할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRead.. 2025. 1. 9.
[백준] 1822번 - 차집합 [Java] https://www.acmicpc.net/problem/1822 1.  아이디어 집합과 정렬을 동시에 수행할 수 있는 TreeSet을 활용했다.2. 문제풀이 집합 A를 TreeSet으로 선언 후 집합 A의 원소들을 A에 넣은 후 집합 B에 해당하는 원소들을 A에서 제거하면 차집합을 얻을 수 있는 점을 이용해서 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Buffe.. 2025. 1. 9.
[백준] 5063번 - TGN [Java] https://www.acmicpc.net/problem/5063 1.  아이디어 (광고를 하지 않았을 때 수익)과 (광고를 했을 때의 수익 - 광고 비용)을 비교하면 간단하게 해결할 수 있다.2. 문제풀이 반복문을 활용해서 간단하게 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new Output.. 2025. 1. 9.
[백준] 11536번 - 줄 세우기 [Java] https://www.acmicpc.net/problem/11536 1.  아이디어 오름차순, 내림차순 여부를 String의 compareTo 메서드로 알아낼 수 있다.2. 문제풀이 두 문자열을 비교해서 사전순이면 음수, 사전순의 반대면 양수를 반환하는 compareTo 메서드와 boolean 타입으로 오름차순, 내림차순을 저장하는 flag를 두어 해결했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int.. 2025. 1. 9.
[백준] 7567번 - 그릇 [Java] https://www.acmicpc.net/problem/7567 1.  아이디어 최근에 놓은 그릇을 기록하며 계산하면 간단하게 해결할 수 있다.2. 문제풀이 입력은 char 타입 배열로 받은 후 최근에 놓은 그릇을 last라는 변수에 저장한 후 현재 그릇과 최근에 놓은 그릇이 같으면 5cm, 다르면 10cm를 더하는 방식으로 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] input = .. 2025. 1. 9.