망나니 AWOS의 일상
article thumbnail
[java] 백준 2355번 시그마
알고리즘/백준 2021. 8. 4. 16:45

전에는 쉬운 알고리즘 문제 풀면서 시간제한이 1~2 초거나 범위가 꽤 크지 않았다. 하지만 이제는 점차 시간제한도 있고 범위가 상당하다... 처음에 접근한 방식이다. 범위가 int 형이어서 int형을 써보았지만 StackOverflow... Long을 써봤는데도 StackOverflow... 검색해보니 재귀를 많이 돌리면 stackoverflow가 난다고 했다. 아래의 소스는 재귀로 돌렸을 때 결과는 잘 나오지만 백준에 냈을 때 stackoverflow가 나온 결과 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long A = sc..

article thumbnail
[java] 백준 5586번 JOI와 IOI
알고리즘/백준 2021. 8. 2. 12:59

예제 입력 2 같은 경우 겹쳐서 보면 JOI가 1번 IOI가 3번 나온 것을 알 수 있다. 예제 입력3 도 마찬가지로 JOI가 2번 IOI가 3번 나온 것을 알 수 있다. 내가 생각한 방법은 이렇다. String으로 문자열을 입력받고 charAt()으로 JOI와 IOI가 있는지 확인해 count를 세는 것이다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); int count1=0, count2=0; // 배열크기를 벗어나기 때문에 -2를 해줌 // 현재의 문자와 그 다음 첫번째 문자 두번째 문..

article thumbnail
[java] 백준 1427번 소트인사이드
알고리즘/백준 2021. 8. 1. 15:30

이 문제를 보기 전 아래의 문제를 보면 오름차순으로 정렬하였을 때는 Arrays.sort()를 써주었으면 되었는데 이번 문제는 내림차순이다. [java] 백준 2750번 수 정렬하기 문제의 핵심은 오름차순으로 정렬하는 것이다. 이 문장을 보자마자 Arrays.sort()라는 메소드를 이용하면 쉽게 풀 수 있을 것 같아 바로 적용하였다. 기본적으로 오름차순 정렬이기 때문에 간단하 begin-dev-awos.tistory.com 물론 Collections.sort를 이용하여 내림차순 정렬을 할 수 있긴 하겠지만... 보아하니 방법이 어려워 보여서 간단한 방법으로 풀어보았다. import java.util.Scanner; public class Main { public static void main(Strin..

article thumbnail
[java] 백준 5086번 배수와 약수
알고리즘/백준 2021. 7. 31. 22:19

약수와 배수의 공통점은 나누었을 때 딱 나누어 떨어진다는 점이다. 그래서 두 수의 대소 비교만 해주면 약수와 배수를 구할 수 있을 것이라고 판단하여 아래와 같이 코드를 짰다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { int a = sc.nextInt(); int b = sc.nextInt(); if (a == 0 && b == 0) { break; } if (a b && a % b =..

article thumbnail
[java] 백준 2750번 수 정렬하기
알고리즘/백준 2021. 7. 30. 23:30

문제의 핵심은 오름차순으로 정렬하는 것이다. 이 문장을 보자마자 Arrays.sort()라는 메소드를 이용하면 쉽게 풀 수 있을 것 같아 바로 적용하였다. 기본적으로 오름차순 정렬이기 때문에 간단하게 한줄 써주면 된다. 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[] arr = new int[N]; for(int i=0; i

article thumbnail
[java] 백준 2455번 지능형 기차
알고리즘/백준 2021. 7. 29. 12:50

여기서 가장 중요한 점은 '기차에 사람이 가장 많을 때의 사람 수를 계산' 하는 것이다. 아래의 코드를 보면 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int max = -1, tot=0; for(int i=0; i

article thumbnail
[java] 백준 1292번 쉽게 푸는 문제
알고리즘/백준 2021. 7. 28. 12:15

예제 입력 1에 보면 3, 7을 입력으로 받아서 15가 출력되었는데 그 과정을 설명해보자면 1+2+2+3+3+3+4+4+4+4+5+5+5+5+5 ~~~ + 1000이라고 생각해보았을 때 3번째부터 7번째 수까지 합을 보면 2+3+3+3+4 = 15가 된다. 즉, 내가 생각한 방법은 값을 다 채워 놓고 그 이후에 값을 받아서 A번째부터 B번째까지 값을 뽑아내면 되겠다 싶어 아래와 같이 구현하였다. 배열을 1001로 뽑은 이유는 입력에 보면 (1 ≤ A ≤ B ≤ 1,000) 이기 때문에 배열에 담아봤자 1001개를 넘지 못할 거라고 생각해서이다. 이중 for문을 통해서 1+2+2+3+3+3 ~~ 이런 식으로 만들어주었고 배열은 총 1001개이지만... 반례인 A=1, B=1000이라고 생각했을 때 배열의 ..

article thumbnail
[java] 백준 10773번 제로
알고리즘/백준 2021. 7. 27. 12:31

해당 문제 같은 경우 Stack 클래스를 사용하면 쉽게 풀 수 있다. Stack은 LIFO구조로 나중에 들어온 값이 먼저 나간다. 힌트에서 볼 수 있는 결과와 같다. push메소드와 pop메소드로 값을 넣고 뺄 수 있다. import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Stack stack = new Stack(); int K = sc.nextInt(); int tot =0; for(int i=0; i

article thumbnail
[java] 백준 2440번, 2441번 별 찍기 - 3~4
알고리즘/백준 2021. 7. 26. 12:01

2440번 별 찍기 - 3 간단하게 이중 for문을 돌려서 만들 수 있는 문제이다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); for(int i=N; i>0; i--){ for(int j=0; j0; i--){ for(int k=N-i; k>0; k--){ System.out.print(" "); } for(int j=0; j0이라고 하였으니 반복문을 탈출하고 j의 반복문으로 넘어가서 별 개수를 5개만큼 찍게 된다. 첫 번째 반복문을 다시 돌게 되면 N=4가 되고 k의 반복문에서 k는 1이..

article thumbnail
[java] 백준 2420번 사파리월드
알고리즘/백준 2021. 7. 25. 15:33

이 문제 같은 경우 나는 문제 내용을 이해하지 못했다... 문제의 요점은 두 서브도메인을 합칠 때, 유명도의 차이가 너무 차이나지 않을 경우에만 두 서브도메인을 결혼시키는 것 인데... 그래서 어쩌라는건지... 출력을 보고 알았다. 절대값을 구하라는 것 (ㅣN-Mㅣ)을 출력하라는 것. 간단하다. Math.abs 함수를 쓰면 절대값을 쉽게 구할 수 있다. 백준 사이트에서는 예제에 나오는 입력값 말고도 극한의 상황을 만들기 위해 입력에 주어진 (-2,000,000,000 ≤ N, M ≤ 2,000,000,000)을 입력값으로 넣어버리는 경우가 있기 때문에 BigInteger 클래스를 썼다. BigInteger 클래스를 쓴 알고리즘 문제는 여기서도 볼 수 있다. 설명도 함께 달아놨으니 BigInteger 클래..

article thumbnail
[java] 백준 2581번 소수
알고리즘/백준 2021. 7. 25. 14:30

문제 조건 1. M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 합 2. 둘째 줄에 1번 조건의 소수 중 최솟값 출력 3. M이상 N이하의 자연수 중 소수가 없을 경우 첫째 줄에 -1 출력 import java.util.Scanner; // 2581 class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); int N = sc.nextInt(); int[] arr = new int[N]; int count, tot=0, sosuCount=0; for(int i=M; i

article thumbnail
[java] 백준 11653번 소인수분해
알고리즘/백준 2021. 7. 24. 12:15

문제 조건 1. 소인수 분해 결과를 한 줄에 하나씩 오름차순으로 출력 (1,2,3 ~~) 2. N이 1인 경우 아무것도 출력 안함 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); if(N == 1) { sc.close(); } for(int i=2; i

article thumbnail
[java] 백준 4153번 직각삼각형
알고리즘/백준 2021. 7. 23. 21:14

마지막에 0 0 0 을 입력시켰을 때 반복문을 종료 시켜주면 되겠다 싶어 이런식으로 구현을 했고 Math.pow 함수를 쓰면 ex) Math.pow(3,2) => 3의 제곱인 9가 나오는 것이다. 그래서 아래와 같이 코드를 작성했다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true){ int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); // 입력이 0 0 0 일때 반복문 탈출 if(a == 0 && b == 0 && c == 0){ break; } ..

article thumbnail
[java] 백준 1978번 소수 찾기
알고리즘/백준 2021. 7. 22. 21:09

import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int sosu=0; for(int i=0; i

article thumbnail
[java] 백준 10757번 큰 수 A+B
알고리즘/백준 2021. 7. 21. 22:01

import java.math.BigInteger; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); BigInteger A = sc.nextBigInteger(); BigInteger B = sc.nextBigInteger(); System.out.println(A.add(B)); } } int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647 이고 long은 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,85..

article thumbnail
[java] 백준 2839번 설탕 배달
알고리즘/백준 2021. 7. 20. 22:30

import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); if(3