코드 저장소

공부에는 끝이 없다!

JAVA/코딩 테스트 32

백준 문제 풀이 - 일반 수학 1단계 - 11005번 진법 변환 2 (브론즈 1)

이전의 문제를 뒤집은 문제이다. 이번에는 10진법의 수 N이 주어지고 이 숫자가 B 진법에서 어떤 수인지 출력하는 프로그램을 작성하는 문제이다. 우선 진법 변환의 단계에 대해서 알아보자. 10진법을 다른 진법으로 변환하는 것은 다음과 같다. 예를 들어 10진수를 25진수로 바꾼다고 가정할 때 1. 변환하려는 진법의 기수를 정한다. 여기서는 25진수를 변환하므로 기수는 25가 된다. 2. 10진수를 변환하려는 진법의 기수로 나눈 몫과 나머지를 계산한다.몫은 다음 계산의 기준이 되며, 나머지는 현재 자리의 값으로 사용된다. 3.나머지를 해당 진법에서 사용하는 숫자로 변환한다. 25진수에서는 0부터 24까지의 숫자가 사용되므로 숫자 10부터는 알파벳 대문자 A부터 사용 된다. 4.나머지를 변환한 값을 앞에서부..

백준 문제 풀이 - 일반 수학 1단계 - 2745번 진법 변환 (브론즈 2)

어느덧 일반 수학 단계까지 넘어왔다. 이번 문제는, B진법의 수 N이 주어졌을 때, 이 숫자를 10진법으로 바꾸어 출력하는 프로그램을 구현하는 문제이다. 우선, 내가 수학에 좀 약한지라 진법의 변환을 어떤식으로 하는지 이해를 못해서 진법에 대해서 먼저 찾아봐야 했다. 해당 문제를 chatGPT를 이용하여 질문을 해보았더니 다음과 같은 답변을 얻을 수 있었다. 36진법을 10진법으로 변환하는 과정은 다음과 같이 진행됩니다. 각 자릿수의 값을 계산하고 해당 값을 36진법에서 10진법으로 변환하여 더해주면 됩니다. 예를 들어, ZZZZZ의 36진법 값을 10진법으로 바꿔보겠습니다: ZZZZZ(36진법) = Z * 36^4 + Z * 36^3 + Z * 36^2 + Z * 36^1 + Z * 36^0 = 35 ..

백준 문제 풀이 - 2차원 배열 단계 - 2563번 색종이 (실버 5)

해당 문제는 총 100x100의 크기의 도화지에 색종이를 붙인다고 할때, 색종이가 붙어 있는 영역의 전체 넓이를 구하는 문제이다. 색종이의 수는 처음에 입력되며 크기는 10x10으로 고정이지만, 겹치는 부분이 생길 수 있으므로, 그것을 감안하여 계산하여야 한다. 나는 전체 도화지를 100x100의 빈 2차원 배열을 만들어 두고, 2차원 배열 안에 색종이의 시작점이 주어지면 시작점에서 + 10으로 2중 for문을 돌려서 해당하는 인덱스에 집어넣은 후, 값이 있는 것만 다른 배열에 담아 해당 배열의 크기를 구하여 계산하는 방식으로 설계를 하였다. 코드는 다음과 같다. import java.io.*; import java.nio.Buffer; import java.util.*; class Main{ publi..

백준 문제 풀이 - 2차원 배열 단계 - 2738번 행렬 덧셈 (브론즈 5)

브론즈 5단계의 간단한 문제이지만, 이중 반복문의 반복이 아닌 다른 방법으로 풀어 정리를 해두고자 한다. 우선 문제를 살펴보자. 해당 문제는 2차원 행렬이 주어지는 2개의 2차원 배열의 값을 더하여 하나의 2차원 배열로 만드는 것이다. 문제의 제약조건이 그렇게 크지 않아 배열의 크기가 100*100을 넘어 가지는 않는다. 때문에 대부분의 사람들이 이중 포문의 반복으로 풀어낸 것을 볼 수 있었다. import java.io.IOException; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); int ..

백준 문제 풀이 - 심화 1 단계 - 1157번 단어 공부 (브론즈 1)

알파벳 대소문자로 된 단어가 주어졌을 때, 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하는 문제이다. 제한이 좀 있는데, 알파벳의 대 소문자를 구분하지 않으며, 가장 많이 사용된 알파벳을 대문자로 출력하여야 한다. 주어진 단어는 최대 100만의 길이를 가질 수 있다. 또한 가장 많이 사용된 알파벳이 여러 개 존재하는 경우 ? 를 출력한다. 처음 문제를 풀때에는 찾을 문자열의 갯수를 리턴하는 메서드를 만들어, 문자열의 길이만큼 반복하며 최대 값의 문자를 찾는 방법으로 구상을 하였다. 그래서 메서드를 filter를 사용한 람다식으로 구성하였는데 코드는 다음과 같다. import java.util.*; import java.io.*; class Main{ public static St..

백준 문제 풀이 - 문자열 단계 - 5622번 다이얼(브론즈 2)

문자열 단계도 이제 거의 막바지이다. 이번 문제는 다이얼 전화기에 각 알파벳에 해당하는 숫자가 있고, 문자열이 들어왔을 때 전화를 걸기 위해 최소 시간을 구하는 코드를 만드는 문제였다. 이 문제도 사람마다 푸는 방식이 많이 달랐는데, 대부분의 사람들은 다음과 같이 각 알파벳 별로 케이스를 만들고 케이스에 해당하는 카운트를 만들어 문제를 해결하였다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); int count = 0; int k = s.length(); for(int i = 0; i ..

백준 문제 풀이 - 문자열 단계

어느덧 문자열 단계까지 넘어왔다. 문자열 문제는 꽤 풀어봤던 터라 어렵지는 않았고 반복문을 사용하던 것을 함수로 썼던 것이라던지 좀더 쉽게 푸는 방법들을 정리해보려 한다. 9068번 문자열 (브론즈 5) 문자열을 입력으로 주면 문자열의 첫 글자와 마지막 글자를 출력하는 프로그램을 작성하는 문제이다. SubString을 사용하거나 배열을 써서 처음과 끝을 배열에 담고 출력하는 분들도 계셨다. 나는 StringBuilder를 사용해서 입력받은 문자열의 처음과 끝을 charAt 메서드로 뽑아내서 append 시키고 출력하는 방법을 사용했다. import java.util.*; import java.io.*; class Main{ public static int n; public static String s; ..

백준 문제 풀이 - 1차원 배열 단계 - 10811번 바구니 뒤집기

브론즈 2단계의 배역 역순 문제이다. 특정 인덱스의 시작과 끝값이 들어오면 배열의 해당 인덱스 값을 역순으로 뒤집는 간단한 문제였다. 다 풀고 확인해보니 다른 분들은 다 배열로 풀었는데 나는 ArrayList를 사용하여 풀어서 코드가 좀 많이 달랐다. (솔직히 for문 쓰는게 조금 귀찮아서 ArrayList로 한것도 있다.) 대부분의 분들은 아래 코드처럼 푸셨는데 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 M = sc.nextInt(); ..

백준 문제 풀이 - 1차원 배열 단계 - 5579번 과제 안 내신 분...?

백준 문제를 풀어 보던 중 5579번에서 생각보다 애를 먹었다. 기본적인 문제였음에도 문제 의도를 제대로 파악하지 못해서 헤맸던것 같다. 해당 문제를 먼저 살펴보자. 해당 문제는 여러가지 방법으로 풀 수 있었는데, 나는 입력받은 배열을 생성해서 정렬한 후 앞의 인덱스의 1의 값을 더한 값과 일치하지 않으면 출력하는 방법으로 풀려고 하였다. 코드는 다음과 같이 구성하였는데 import java.util.*; import java.io.*; class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Array..

백준 문제 풀이 - 반복문 단계

반복문 역시 아직은 브론즈 단계라 그런지 크게 어려운 것은 없었다. 대부분 for문 while문을 사용하여 끝내면 되는 문제들이였고 해당 조건만 잘 맞춰주면 크게 문제 없이 풀 수 있었다. 생각이 필요했던 문제는 2439번 -별찍기 2 (브론즈 4) 였는데 어떤 방법으로 할지 고민하다가 다음과 같이 코드를 구현하였다. import java.util.*; import java.io.*; class Main{ public static int n; public static String s=""; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(..