반응형

Java/백준알고리즘 111

[Java] 백준알고리즘 #2720 세탁소 사장 동혁

거스름돈으로 줄 동전의 개수를 구하는 문제. 아주 간단하다. 가장 큰 단위의 동전 부터 차례차례 나누어 몫을 출력하면 된다. 예를 들어 예제의 124 같은 경우 124를 25로 나눔 => 몫 4 나머지 24 24를 10으로 나눔 => 몫 2 나머지 4 4를 5로 나눔 => 몫 0 나머지 4 4를 1로 나눔 => 몫 1 나머지 0 이 몫을 차례대로 출력하면 4 2 0 1이 되겠다. 전체 코드는 다음과 같다. import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); int q = 25; int d = 10;..

[Java] 백준알고리즘 #11005 진법 변환 2

앞선 진법 변환 문제를 반대로 해 놓은 문제이다. 2023.10.05 - [Java/백준알고리즘] - [Java] 백준알고리즘 #2745 진법 변환 예시로 31이라는 수를 2진법으로 변환한다고 하면 31을 2로 나눈다 => 몫 15 나머지 1 15를 2로 나눈다 => 몫 7 나머지 1 7을 2로 나눈다 => 몫 3 나머지 1 3을 2로 나눈다 => 몫 1 나머지 1 1을 2로 나눈다 => 몫 0 나머지 1 즉 몫이 0이 될 때 까지 n으로 나누고, 나머지들을 역순으로 나열하면 n진법 수를 구할 수 있다. 전체 코드는 다음과 같다. import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc ..

[Java] 백준알고리즘 #2745 진법 변환

입력받은 수 b진법수 n을 10진법으로 출력하는 문제. 위 예제에서 보듯이 ZZZZZ 라는 36진법 수가 있다고 하면 이를 10진수로 바꾸는 과정은 다음과 같다. 먼저 Z라는 수는 36진법에서 35번째 수이다. 5번째 Z : 35 x 1 = 35 4번째 Z : 35 x 36 = 1,260 3번째 Z : 35 x 36^2 = 45,360 2번째 Z : 35 x 36^3 = 1,632,960 1번째 Z : 35 x 36^4 = 58,786,560 이를 모두 더하면 60,466,175 라는 값이 나오게 된다. 이를 공식화하게 되면 n번째 수 : 해당수 x 1 n-1번째 수 : 해당수 x 진법 n-2번째 수 : 해당수 x 진법^2 ... 이 될 것이다. 이를 반복문으로 나타내면 다음과 같다 int tmp = 1..

[Java] 백준알고리즘 #2563 색종이

100 x 100 크기의 도화지에 10 x 10 인 색종이를 붙인 후, 색종이가 붙어 있는 면적을 구하는 문제이다. 먼저 5 x 5 크기의 도화지가 있다고 해보자. 여기에 3 x 3 색종이를 붙여보자. 이를 2차원 배열이라고 하고, 색종이가 붙어 있지 않는 곳은 0, 색종이가 붙어 있는 곳이 1이라고 한다면 다음과 같다. 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 사각형의 면적은 가로 x 세로 이므로, 색종이가 붙어 있는 곳의 면적은 9가된다. 위 2차원 배열에서 1인 부분의 수를 세어보면 똑같이 9가 되는 것을 알 수 있다. 따라서 이 문제는 100 x 100 크기의 2차원 배열을 만든 후, 색종이가 붙는 위치에 값을 1로 변환시켜 주면 간단히 구할 수 있..

[Java] 백준알고리즘 #10798 세로읽기

5줄을 입력받아 세로로 읽어 출력하는 문제. abc de f gh ijk 이라면 adfgibehjck 가 되겠다. 각 문자들은 줄 단위로 입력되므로 nextLine()함수를 통해 입력받아 이를 이차원 배열에 저장한다. String[] ary = new String[5]; char[][] result = new char[15][5]; for (int i = 0; i < 5; i++) { ary[i] = sc.nextLine(); for (int j = 0; j < ary[i].length(); j++) { result[j][i] = ary[i].charAt(j); } } 이때 이차원배열은 15행 5열 으로 한다. (입력받은 문자의 최대가 5행 15열이기 때문) for (int i = 0; i < 15; i..

[Java] 백준알고리즘 #2566 최댓값

이차원 배열을 입력받고 최댓값과 그 최댓값이 위치한 행, 열의 값을 구하는 문제이다. int[][] ary = new int[9][9]; int max = -1; int row = 0; int col = 0; 위와 같이 9x9 크기의 배열을 만들고, 최댓값을 저장할 max, 행을 저장할 row, 열을 저장할 col 변수를 선언한뒤, 반복문을 통해 81개의 문자를 입력받으면서 최댓값과 비교하여 크다면 max에 해당 수를 넣으면 된다. 다만 여기서 주의할 점은 최댓값을 저장할 max 함수를 -1로 초기화 한 것인데, 이는 모든 수가 0인 경우를 대비하기 위함이다. 전체 코드는 다음과 같다. import java.util.Scanner; public class Main { public static void m..

[Java] 백준알고리즘 #1316 그룹 단어 체커

문제의 조건에 부합하는 그룹 단어의 갯수를 출력해주는 프로그램을 작성해보자. 그룹단어의 조건에 포함되지 않는 것은 어떤 알파벳이 연속적으로 나오지 않는 경우이다. ex) aaaabbbbccccdddda => a,b,c,d 모두 연속적으로 나오나 a가 맨 뒤에 다시 나오므로 그룹단어가 아님. 이제 우리는 이 단어가 그룹 단어인지 아닌지 판별하기 위해 각 알파벳을 저장해 둘 배열을 만든 후, 각 알파벳의 등장 여부를 판별하는 플래그를 세워 판단하면 되겠다. 이를 위해 배열을 먼저 만든다. boolean[] flag = new boolean[26]; String word = sc.next(); flag[word.charAt(0) - 97] = true; flag 라는 배열을 사용하기 위해 입력받은 문자를 한개..

[Java] 백준알고리즘 #25206 너의 평점은

전공과목, 학점, 전공평점을 입력받고 학점평균을 구하는 문제이다. 먼저 전체 코드를 보자. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double sum = 0; double count = 0; for (int i = 0; i < 20; i++) { String object = sc.next(); double val = sc.nextDouble(); String grade = sc.next(); count += val; switch (grade) { case "A+": sum += val * 4.5; break; case "A0..

[Java] 백준알고리즘 #11718 그대로 출력하기

입력받은 문자열을 그대로 출력하는 문제. 입력이 몇줄이나 주어지는지 알 수 없다는 것에만 주의하면 간단히 해결 가능. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { String text = sc.nextLine(); System.out.println(text); } sc.close(); } } hasNextLine()함수로 다음에 올 문자열이 있는 경우만 출력해주면 된다.

[Java] 백준알고리즘 #5622 다이얼

다이얼을 돌리는 시간을 구하는 문제. 먼저 아스키 코드표를 보자. 문제에서 대문자로 이루어진 단어가 주어진다고 했으니, 아스키코드표를 활용하면 쉽게 범위를 특정할 수 있다. 입력받은 문자를 한글자씩 잘라 아스키코드 변환 (int형변환)해준 후 각 범위에 따라 시간을 1초씩 추가해주면 된다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); int time = 0; for (int i = 0; i < a.length(); i++) { int tmp = a.charAt(i) - 65; time += ..

반응형