반응형

백준알고리즘 129

[Java] 백준알고리즘 #13458 시험 감독

시험 응시자 수에 따른 감독관의 수를 구하는 문제이다. 먼저 변수부터 선언해보자. 시험장은 n, 시험장 별 학생 수는 n만큼의 크기를 가진 a의 배열에 각 시험장의 학생 수를 넣는다. 총 감독관이 감시할 수 있는 응시자의 수는 b, 부 감독관이 감시할 수 있는 수는 c에 넣는다 총 감독관의 수는 num이라고 하자. 이때 num은 int형이 아닌 long형으로 한다. int n = sc.nextInt(); int[] a = new int[n]; for (int i = 0; i < a.length; i++) { a[i] = sc.nextInt(); } int b = sc.nextInt(); int c = sc.nextInt(); long num = 0; 위 조건에서 범위가 무려 1,000,000 까지 이므로..

[Java] 백준알고리즘 #1476 날짜 계산

e, s, m 으로 입력받은 년도가 우리가 알고있는 년도로 몇 년인지 구하는 문제이다. 여러가지 방법이 있을 수 있겠지만 가장 단순하게 최대범위만큼 반복하며 년도를 증가시키는 방법을 사용할 것이다. 먼저 e,s,m을 입력받고 차례로 증가시키기 위한 임시 변수 etmp, stmp, mtmp도 만들어둔다. 우리가 사용하는 년도를 저장할 year 변수도 만들어둔다. int e = sc.nextInt(); int s = sc.nextInt(); int m = sc.nextInt(); int etmp = 0; int stmp = 0; int mtmp = 0; int year = 0; 그 후 최대범위(e, s, m의 각 범위의 곱)만큼 반복하며 차례로 etmp, stmp, mtmp 그리고 year을 증가시켜준다. ..

[Java] 백준알고리즘 #2455 지능형 기차

각 역에서 사람들이 내리고 탈 때, 사람이 가장 많이 타고 있는 경우의 사람 수를 구하는 문제이다. 먼저 변수부터 선언한다. int max = 0; int people = 0; int inper = 0; int outper = 0; 가장 많이 타고있을 때를 max 현재 타고 있는 사람의 수를 people 타는 사람을 inper 내리는 사람을 outper이라고 설정한다. 4개의 역을 지나므로 for문을 이용하여 4회 반복하며 현재 있는 사람 수(people)에 내리는사람(outper)을 빼고 타는 사람(inper)을 더하면 된다. 그리고 if문을 활용하여 max보다 people(사람 수)가 더 크다면 max에 people을 복사한 후 이 max를 출력해주면 된다. 전체 코드를 보면 다음과 같다. impor..

[Java] 백준알고리즘 #2475 검증수

5개의 숫자를 입력받은 후 검증수를 구하는 문제이다. 숫자는 총 6개로 고정되어있으므로 크기가 6인 배열을 생성한 후 이 배열에 각 숫자를 입력받으면 되겠다. for문을 이용하여 5개의 숫자를 입력받은 후, 각 숫자를 제곱하여 sum 변수에 더해준 후, 마지막 배열의 6번째 자리에는 이 sum을 10으로 나눈 나머지를 대입하면 된다. 전체 코드를 보면 다음과 같다. import java.util.Scanner; public class Back2475 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] num = new int[6]; int sum = 0; for (int i = 0; i < num.len..

[Java] 백준알고리즘 #2163 초콜릿 자르기

위 문제의 공식을 도출하기가 헷갈려서 그렇지 굉장히 간단한 문제이다. 위와 같은 크기의 초콜릿이 있다고 하자. M은 9개, N은 7개이다. 먼저 M 또는 N개만큼 나눈다. 어느쪽으로 나누어도 결과는 똑같이 나온다. N개로 나눈다고 하자. N개로 나누기 위해서는 가로선을 따라 쪼개면 되는데 이 횟수는 N - 1, 즉 6번이 된다. 그리고 N개로 나누어진 초콜릿들을 각각 M개로 나누어야 한다. 이 횟수는 N x (M - 1)이다. 두 횟수를 더하면 N - 1 + N x (M - 1) 이 된다. 이는 N - 1 + (N x M) - N과 같으므로 N을 지워주면 N x M - 1 이라는 아주 간단한 공식이 나오게 된다. 이 공식을 대입하여 코드를 작성해보면 다음과 같다. import java.util.Scann..

[Java] 백준알고리즘 #1010 다리 놓기

서쪽의 사이트 n 개와 동쪽의 사이트 m개를 이을 다리를 놓을 때, 이 다리를 놓는 경우의 수를 구하는 문제이다. 구하는 방법은 간단하다. m개의 사이트에서 n개를 고르는 경우의 수는 m Combination n (mCn) 으로 해결할 수 있다. 이를 구하는 공식은 백준알고리즘 #1010 다리 놓기 문제 서쪽의 사이트 n 개와 동쪽의 사이트 m개를 이을 다리를 놓을 때, 이 다리를 놓는 경우의 수를 구하는 문제이다. 구하는 방법은 간단하다. m개의 사이트에서 n개를 고르는 경우의 수는 m Combination n (mCn) 으로 해결할 수 있다. 이를 구하는 공식은 다음과 같다 다만 위 식을 조금 간단히 하면 코드도 간단히 해결할 수 있다. n이 r보다 크므로 n!은 n x (n-1) x ... x r..

[Java] 백준알고리즘 #1157 단어 공부

입력받은 단어에서 가장 많이 사용된 알파벳을 구하는 문제이다. 먼저 대소문자를 구분하지 않으므로 입력받은 문자열을 toUpperCase() 함수를 이용해 대문자로 바꿔준다. 이후 각 알파벳이 얼마나 쓰였는지 확인할 배열 count[] 를 생성해주고 크기를 26(알파벳 수)로 잡는다. 그리고 for문을 이용해 각 charAt() 함수로 입력받은 문자열을 하나 하나 잘라서 count[a.charAt(i)-65] 를 증가시킨다. 여기서 a.charAt(i)-65 는 입력받은 알파벳을 아스키코드로 변환하여 65를 빼면 A의 경우 0, B의 경우 1 .. 이 나온다. 즉 ABCD를 입력받았다면 a.charAt(0) - 65 는 0 a.charAt(1) - 65 는 1 a.charAt(2) - 65 는 2 a.ch..

[Java] 백준알고리즘 #10990 별 찍기 - 15

속이 빈 트리모양의 별을 출력하는 문제이다. 2021.01.12 - [C/백준알고리즘] - [C] 백준알고리즘 #2442 #2443 별 찍기 - 5 , 6 (트리, 역트리) [C] 백준알고리즘 #2442 #2443 별 찍기 - 5 , 6 (트리, 역트리) 마치 트리모양의 별을 찍는 문제이다. 규칙을 찾아보면 빈칸은 N-1개부터 차례대로 줄어들고 *의 갯수는 1,3,5,7 ... 2n-1 개 만큼 늘어난다. 친절하게도 문제에서 N번째 줄에는 2*N-1개 라고 정의해주 sehyeok.tistory.com for문 구성은 C나 Java나 동일하므로 앞서 작성했던 트리 모양의 별 찍기를 참고해보자. 위와같은 트리 구조에서 가운데가 비어있는 공간을 만들어야 하므로 별을 하나만 찍어야 한다. 앞선 코드를 조금 수정..

[Java] 백준알고리즘 #2675 문자열 반복

반복할 횟수와 문자열을 입력 받은 후 반복할 횟수만큼 각 문자를 반복하여 출력하는 문제이다. 반복할 횟수를 r이라 입력받고 문자열을 s에 입력받는다고 하자. int r = sc.nextInt(); String s = sc.next(); ABC 라는 문자열과 3의 반복횟수를 입력받는다고 하면 먼저 A가 3회 출력되어야 한다. 이는 charAt(0) 의 문자가 3번 출력되는 것이다. 그 다음에는 charAt(1) 의 문자(B) 가 3번, charAt(2) 의 문자(C)가 3번 출력 될 것이다. 이를 위해 이중 for문을 사용해서 작성해보자 for (int j = 0; j < s.length(); j++) { for (int k = 0; k < r; k++) { System.out.print(s.charAt(..

반응형