반응형

java 94

[Java] 백준알고리즘 #15894 수학은 체육과목 입니다

정사각형을 이어 붙인 후 도형의 둘레를 구하는 문제. 합쳐진 도형의 상 하 좌 우면을 나눠서 계산하면 간단하다. 빨간 부분 (윗변) 을 이어붙이면 아랫변과 같음을 알 수 있고, 파란부분(우변)을 이어붙이면 층 수와 같음을 알 수 있다. 좌변도 마찬가지이므로 결국 구하고자 하는 값은 가장 아랫부분의 정사각형 수 x 4 가 됨을 알 수 있다. 이제 코드를 작성해보자. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long sum = (long) n * 4; System.out.print(sum);..

[Java] 백준알고리즘 #1094 막대기

막대의 길이를 절반으로 자른 뒤 원하는 수보다 작다면 하나를 버리고, 크다면 작은 것을 반으로 잘라서 원하는 n만큼의 막대를 만드는 문제이다. 먼저 필요한 변수부터 만들어보자 막대기의 개수를 확인해줄 count변수 막대기의 길이를 확인하는 stick 변수 잘라서 모은 막대기의 합을 확인할 sum 변수 이렇게 구성할 수 있겠다. int n = sc.nextInt(); int count = 1; int stick = 64; int sum = stick; sum을 stick으로 초기화 한 이유는 while문을 통해 보도록 하자. 조건을 반복해야 하므로 while문을 사용한다. 이 때의 조건은 sum != n 으로 하자. while(sum != n) { stick = stick/2; if(sum > n) { s..

[Java] 백준알고리즘 #1676 팩토리얼 0의 개수

입력받은 n값으로 n!의 값을 구한 후 뒤에서부터 연속된 0이 몇개 있는지 찾는 문제이다. 가장 먼저 생각나는 방법으로는 팩토리얼 값을 구한 후 차례로 10으로 나누어 나머지가 0이라면 count변수를 증가시켜 0의 개수를 찾는 방법이 있다. public class Back1676 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long fact = 1; int count = 0; for (int i = 1; i 0) { if (fact % 10 == 0) { count++; fact = fact / 10; } else break; } System.out.println(c..

[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..

반응형