본문 바로가기

반응형

Projects/백준 문제

(32)
백준 2577번 자바 문제 숫자의 개수 알고리즘 문제를 풀 때는 확실히 프로그램상으로 실제로 어떻게 답을 도출해낼 수 있는 지를 생각하고 이후 코드를 짜는 것이 중요함을 느낀다. 단계적인 로직을 따른다. A, B, C가 입력되어야 하므로, 스캐너를 이용해 입력값을 받는다. 이후 A*B*C를 하는데, 이는 문제의 조건에 해당하므로, for문이나, 최종 프린트문에 들어가지 않아도 되므로 메인 함수에 작성한다. 숫자를 각각 세기 위해서는 숫자를 나눠야 하므로, 나눌 수 있는 단위인 스트링으로 형변환해준다. 형변환한 숫자를 하나씩 나눌 수 있는 함수를 사용하여 new arraylist 안에 넣어준다. 실제로 출력해야 하는 부분에 해당하는 1~9의 사용개수를 세기 위해 i = 0; i < 10까지 조건을 맞춰주고 리스트 안에 원소 개수를 세어주는 co..
백준 2562번 자바 문제 최대값의 인덱스 가져오기 주어진 값들의 리스트의 최대값을 구하고 그것의 인덱스를 구하는 문제이다. 다만 여기서 힌트는, 인덱스는 0부터 시작하므로, 사람이 세는 몇 번째 숫자에 해당하는 숫자인가라고 했을 때는 1을 더해줘야 한다. 영문으로 how to get index of arraylist in java 라는 식으로 검색했고, 이것과 같은 사이트가 나왔다. import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Main { public static void main(String[] args) { // 9개의 입력값을 가져온다. // 9개의 입력값 중에서 최대값을 찾는다. // 최대값의 인덱스를 가져온다. Sca..
백준 10818번 자바 문제 최소 최대값 어느 정도 중괄호 위치에 대한 이해가 잡혔다. 왜 어떤 변수는 위에서 잡아둬야 하고, 왜 어떤 변수는 for문에서 해야 하는가. 피라미드처럼 레이어 단위로 이해하면 이해하기가 쉽게 된다. 아래부터 패키지, 클라스, 메인함수, 이후 반복문 조건문 등으로 높은 레이어로 갔다가, 이후 다시 출력을 해야 할 때, 프로그램을 종료할 때는 낮은 레이어로 돌아간다. 문제에서 말하듯이 입력 줄이 두 줄이라면 우선 스캐너가 두 번 들어가야 하는데 이 위치를 알고 구현해야 한다. 최우선 조건이 되는 N의 경우는 코드의 맨 처음에 받을 수 있어야 하는 것이 당연하고, 이후 두 번째 줄에서 N이라는 조건만큼 하려면, N만큼 반복되는 반복문이 실현되어야 한다. 그러면 자연스레 반복문 안에 두 번째 스캐너가 들어가게 되고, 입력..
백준 1110번 자바 문제 더하기 사이클 구하기 브론즈1 문제인데, 처음 문제 독해하는데 문제가 있다가 어쨌든 이해를 하고 풀려고 코딩을 했다. 읽어보니, 문자열과 정수 간 형변환을 시기적절하게 하면서 연산만 해주면 되는 문제라고 생각했다. 다만, 나름 제대로 짠 것 같은데 답이 틀리게 나온다. 2022-02-02 오후 3:39 백준에 질문을 올려놨다. 문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이..
백준 10871번 자바 문제 List ArrayList 3가지 방식으로 문제를 풀어봤다. 리스트에 원소가 추가되는 방식을 이 문제를 풀면서 배웠다. 리스트를 만들 때는 데이터타입 리스트명[] = new 데이터타입[데이터크기]; 인덱스로 데이터를 가져올 때는 리스트명[인데스번호] import java.util.Scanner; public class Main { public static void main(String[] args) { //문제 //정수 N개로 이루어진 수열 A와 정수 X가 주어진다. //이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오. // //입력 //첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) // //둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. //주어지는 정수는 모두 1보다 크거나 같고, ..
백준 2439번 자바 문제 package bj2439; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); sc.close(); // 가장 큰 틀의 반복문을 구상한다. // 여기서 i는 출력횟수 즉, 행의 숫자를 나타낸다. // i번 출력할 것이라는 것이다. for (int i = 1; i
백준 11022번 자바 문제 BufferedReader를 사용하는 것이 익숙해져서, 이렇게도 풀수는 있는데, 과연 메모리를 줄이는 것만이 능사일까라는 생각이 든다. 다른 사람들이 제출한 코드길이와 비교해보면 월등히 길어질 뿐만 아니라, 이상하게도 스캐너와 프린터라인 기능을 사용한 사람들의 메모리 사용량과 시간이 훨씬 더 작고 짧았다. 꼭 필요한 것이 아니라면 가장 단순하게 가는 것이 좋을 것 같기는 하다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTok..
백준 2742번 자바 문제 for문과 while문의 활용 동일하게 BufferedReader와 BufferedWriter를 사용해서 문제를 풀어봤다. 문제 자체는 이전 문제와 시작점과 종료지점만 반대로 지정해주면 되는 거라 쉬웠고, 다만, while문을 사용해보지 않아서 while문을 활용해서도 다시 풀어보았다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOException { BufferedReader ..

반응형