반응형

Java 116

백준알고리즘 #1934 최소공배수 Java

주어진 a와 b값의 최소공배수를 구하는 문제이다. 최소공배수는 a와 b의 공배수 중 가장 작은 수이므로 단순히 두 수중 큰 수부터 시작하여 하나씩 비교하는 방식으로 쉽게 구할 수 있다. 위와 같이 먼저 a와 b의 값을 비교하여 큰 수를 b쪽에 두고, while문을 이용하여 b값을 시작값으로 두고 1씩 증가시키면서 조건(공배수)을 만족시키는 값을 찾을 수 있다. 다만 이렇게 구하게 되면 시간이 굉장히 오래걸리기 때문에 위와 같은 코드로 제출하게 되면 시간 초과라는 오류가 발생하게 된다. 따라서 조금 다른 방식으로 구해보았다. 최소공배수는 두 수의 곱 / 최대공약수 로 구할 수 있기 때문에 먼저 최대공약수를 구한다. 최대공약수는 1부터 두 수중 작은 수까지로 한정되어 있기 때문에 비교적 짧은 시간에 값을 구..

Java 용어 정리

본 글에서는 java와 관련된 용어들을 간단하게 정리해 두려고 한다. 세부적인 내용와 연관된 소스코드 등이 필요하다면 차후에 관련내용 포스팅 후 주석을 달아 두도록 하겠다. Java - 객체지향언어의 특징이 잘 적용된 언어 - Garbage Collector로 자동적인 메모리 관리가 가능 - JDK(Java Developement Kit) : 자바 프로그램 개발에 필요한 구성 요소 - JRE(Java Runtime Environment) : 자바 프로그램 실행에 필요한 구성 요소 - JVM(Java Virtual Machine) : 자바 가상 머신. 자바는 가상머신을 이용하여 작동하므로 플랫폼에 독립적인 장점이 있음. 어떤 운영체제라도 잘 작동한다. 객체와 클래스 객체(Object) - 자신의 속성을 가..

Java/개념정리 2020.12.15

백준알고리즘 #2609 최대공약수와 최소공배수 Java

먼저 두 수를 비교하여 큰수와 작은수를 나눈다. 나눈 이유는 for문에서 작은수 까지만 반복하면 되기 때문에 일부러 큰수와 작은수를 정하는 구문을 넣었다. for문에서는 최대공약수를 찾기 위해 1부터 두 수중 작은 수까지 반복하면서 큰수를 i로 나누었을때, 그리고 작은 수를 i로 나누었을 때 모두 나머지가 0이 되는 수(공약수)를 찾아 gcd변수에 넣는다. for문을 빠져나왔을 때 gcd의 값은 공약수 중 가장 큰 최대공약수가 된다. 두번째 while문에서는 최소공배수를 구한다. 먼저 차례로 증가할 수 j를 만든 후 lcm(최소공배수)가 0인 동안 반복하도록 한다. 위와 마찬가지로 이번에는 j를 큰 수로 나누었을때, j를 작은 수로 나누었을 때 나머지가 모두 0이 되는 j값을 찾는다. 가장 작은 j값을 ..

백준알고리즘 #15596 정수 N개의 합 Java

주어진 조건에 맞게 N개의 정수의 합을 Test 클래스로 sum()메소드를 이용해 정수의 합을 리턴하면 된다. 배열에 들어있는 수들의 합은 for문을 이용하면 쉽게 구할 수 있다. 주어진 조건대로 Test클래스에 sum이라는 함수를 만들었다. 나는 sum 변수를 생성하여 sum에 합을 담은 후 리턴했지만 답을 제출할 때에는 ans라는 변수가 주어지므로 조건에 맞게 변형시키면 되겠다. 밑의 main메소드는 올바르게 실행하는지 확인하기 위해 작성해본 코드이므로 백준알고리즘 정답을 확인할 때에는 제외하고 위의 Test 클래스만 제출하면 된다.

백준알고리즘 #1929 소수 구하기 java (에라토스테네스의 체)

보기에 간단해 보이는 문제이다. sosu()메소드를 만들어서 m부터 n까지의 소수를 차례대로 구하는 코드를 작성했으나 시간 초과로 실패 이러한 시간 초과 문제를 해결하기 위해서는 에라토스테네스의 체를 이용하면 된다. '에라토스테네스의 체' 란 그리스의 수학자이자 지리학자인 에라토스테네스가 고안한 소수(素數)를 찾는 방법으로, 이 방법으로 소수를 찾으려면, 2부터 시작해 자연수를 차례로 쓴 다음, 2 이외의 2의 배수, 3 이외의 3의 배수, 5 이외의 5의 배수의 순서로 수를 지워나간다. 차례대로 지워나갔을 때 남아있는 수는 소수가 된다. 즉 배열을 생성한 후 에라토스테네스의 체를 이용하여 2의배수, 3의배수,... 를 차례대로 걸러내고 남는것을 출력하면 되겠다. n+1개의 배열을 만들고 2의 배수부터 ..

백준알고리즘 #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 를 찾을 때 오버플로우가 발생해버리게 된다. 따라서 ..

반응형