반응형

전체 글 261

백준알고리즘 #2748 피보나치 수 2 java

처음에는 다음과 같이 작성했다. n번째수 n +1 번째 수의 합이 n+2번째 수이므로 x에 n-2번째 수, y에 n-1번째 수를 두고 fi라는 변수에 n번째 수를 출력하도록 했다. 0일경우에는 fi 초기값인 0이 그대로 출력되기때문에 상관없지만 1일 경우에는 for문에서 i < n 조건 때문에 for문으로 진입하지못하고 0이 출력되기때문에 1일 경우만 예외를 두어 fi값을 1로 출력하게 하였다. 여기서 오류가 발생했는데 이유는 문제에서 n은 90보다 작거나 같은 자연수 라는것. 위 코드에 90을 대입하면 다음과 같이 int범위를 초과하여 오버플로우가 발생한다. 이 문제를 해결하기 위해 int형을 모두 long형으로 바꾸면 문제 해결 for문에서 i = 0 으로 하거나 i

백준알고리즘 #11720 숫자의 합 java

입력받은 숫자의 각 자릿수를 더하는 문제이므로 Long형 m값을 입력받은 후 10으로 나눈 나머지들을 각각 더하는 방식으로 다음과 같이 작성해서 제출한 결과 런타임 에러가 나왔다. 작은 수에서는 결과값이 잘 나오지만 N은 100자릿수까지 가능하므로 위 그림처럼 입력받은 m값이 19자리를 넘어가게 되면 InputMismatchException이 발생한다. 이를 해결하기위해 n자리수 만큼의 m값을 String형의 문자열로 받은 후 각 자리를 나누어 배열에 저장한다. 이때 저장한 a[i]의 값들은 모두 '0', '1', ... ,'9' 등의 문자 형태이므로 단순히 수식을 붙여 계산하게 되면 '0'일 경우 아스키코드에 대응하는 수인 48이 나오고 '1'은 49 ... '9'는 57이 나오게 된다. int로 변환..

백준알고리즘 #11654 아스키 코드 java

기본 문제이긴 하지만 Java를 사용할 때에는 char형을 입력받는 방법이 없다. 따라서 String형을 이용해 문자열을 입력 받은 후 charAt() 함수를 이용하여 문자열에서 문자를 분리하여 char형으로 입력하는 방식으로 입력하여야 한다. 따라서 t라는 변수에 문자열로 입력받은 후 가장 첫 문자를 char형으로 바꾸어 a라는 변수에 저장한다. 이때 결과값은 예제처럼 숫자(아스키코드값)로 출력되어야 하므로 a는 int형으로 설정한다.

백준알고리즘 #1011 Fly me to the Alpha Centauri java

시간이 굉장히 많이 걸렸던 문제이다. 먼저 거리가 1부터 차례대로 증가할 때마다 다음과 같이 이동하는 것이 최소값이라는것을 확인한다. 위의 규칙에 따르면 4, 9, 16처럼 제곱수 마다 횟수가 1씩 증가하는 것을 알 수 있는데 이 때 거리가 x^2일때 이동횟수가 x+(x-1)이라는 것을 알 수 있다. 다만 (x-1)^2 과 x^2 사이에 작동횟수가 한번 증가하는 구간이 있는데 이 구간은 x^2 - (x-1)^2 의 중간값이므로 몫을 구하는 / 연산자를 이용하여 계산해준다. 위의 조건에 따라 함수를 작성한 것이다. 처음 설정을 int로 해 두는 바람에 시간 초과라는 에러 표시가 발생했다. 만약 변수를 int로 설정할 경우 거리 dis 보다 큰 제곱수 i 를 찾을 때 오버플로우가 발생해버리게 된다. 따라서 ..

백준알고리즘 #1085 직사각형에서 탈출 java

임의의 점 x, y에서 가장 가까운 모서리까지의 거리를 구하는 문제이다. 먼저 직사각형의 크기는 1000까지로 한정되어있으므로 최솟값을 1000으로 고정시켜준다. 그리고 x, y, w, h가 들어갈 배열을 만들어 각각의 값을 입력시켜준다. 각 모서리까지의 최솟값은 x, y, w-x, h-y 값만 비교하면 나오므로 w 와 h가 들어가있는 a[2]와 a[3]의 원소를 각각 w-x, h-y값으로 바꾸어 준 뒤 for문을 돌려서 a[0]부터 a[3]까지의 값을 비교하여 제일 작은 값을 min 에 넣어주면 완성. import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner s = new Scanner(Syst..

백준알고리즘 #2577 숫자의 개수 java

3개의 수를 입력받고 이 수들을 곱한 값에 0~9까지의 수가 각각 몇개씩 들어갔는지를 확인하는 문제. 먼저 a,b,c를 입력받고 mul변수를 만들어 이 수들을 곱한다. 0부터 9까지의 숫자의 개수가 들어갈 배열 arr[10]도 만들어 둔다. 그 다음 while문을 이용하여 mul 값이 0이 될때까지(10으로 계속 나누다 보면 몫이 마지막에는 0이 된다.) 반복하는 구문을 만든다. 그안의 내용으로는 mul값을 10으로 나눈 나머지(1의 자리수를 하나씩 꺼내는 방법) 를 구하여 n에 mul%10값을 넣은 후 arr[n] 값을 하나씩 카운트 해주면 끝. 마지막으로 for문을 이용해 10개의 값을 가지고 있는 arr 배열의 수를 출력해준다. import java.util.Scanner; public class ..

백준알고리즘 #14681 사분면 고르기 java

x와 y 좌표값을 입력받았을 때 점(x,y)가 어느 사분면에 있는지를 찾는 문제. 먼저 x값이 양수인 경우에서 y값이 양수인가 음수인가를 나누고, 양수라면 1사분면 음수면 3사분면을 출력하면 된다. 마찬가지로 x값이 음수인 경우에서 y값이 양수라면 2사분면 음수라면 3사분면을 출력하면 끝. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int x = s.nextInt(); int y = s.nextInt(); if (x > 0) { if (y > 0) { System.out.println(1); } else System.out.pri..

백준알고리즘 #10996 별 찍기 -21 java

먼저 규칙을 찾아보자. 2일때는 4줄 3일땐 6줄 4일땐 8줄 이므로 n일때 2n줄이 나오게 된다. 그리고 줄 뿐 아니라 칸수도 하나씩 증가하게 된다. 2일땐 2칸, 3일때 3칸... 이런식으로 말이다. 이 때 각 줄에서는 간단한 규칙을 찾아볼 수 있는데 홀수 줄에서 홀수 칸은 *, 짝수 칸은 빈칸. 짝수 줄에서는 반대로 이루어져 있다. 이것을 코드로 나타내 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); for (int i = 1; i

백준알고리즘 #2446 별 찍기 - 9 java

앞선 별 찍기보다 조금 복잡한 문제이다. 규칙을 유추해 보자면 5를 입력했을 때 9 7 5 3 1 3 5 7 9 순으로 별이 찍혔다. 다만 이렇게 별이 찍힌다면 단순히 2n -1, 2n-3 ... 1 ...2n-3, 2n-1 순으로 별을 찍으면 되겠지만 예제 출력에 보면 빈칸이 앞에 붙어있다. 먼저 코드를 보면 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); for (int i = n - 1; i > 0; i--) { for (int j = 1; j < n - i; j++) { System.out...

반응형