반응형

공부 261

백준알고리즘 #9461 파도반수열 Java

삼각형을 이어붙여 다음 삼각형의 변의 길이를 구하는 문제이다. 규칙을 찾아보면 처음 P(1), P(2), P(3)은 1로 고정이고 그 다음부터 P(n-2)+P(n-3) = P(n) 이 되는것을 알 수 있다. 재귀함수를 사용하여 다음과 같이 나타낼 수 있다. 다만 이렇게 만들게 된다면 큰 수를 표현할 때 시간이 엄청 오래걸리게 된다. 예를 들어 80번째의 수를 구하기 위해서는 78, 77 번째의 수를 구해야 하는데 이때 각 78 77번째의 수를 구하기 위해서는 또 75 76, 74 75번째의 수를 구해야 하고 ... 이런식으로 수없이 많은 계산을 반복해야 한다. 이 시간을 줄이기 위해 배열을 생성하여 배열에 각 값들을 저장해 두게 되면 반복되는 계산이 줄어들게 되므로 시간이 단축되는 효과가 있다. 이처럼 ..

백준알고리즘 #2869 달팽이는 올라가고 싶다 Java

V높이의 나무를 하루에 A만큼 올라가고 B만큼 미끄러지면서 얼마만에 꼭대기에 도달하는지 찾는 문제. 보기엔 얼핏 간단해 보이나 시간 제한(0.15초)가 걸린다. 간단히 작성해 보았다. a b v 는 주어진 보기와 같고 ht 는 달팽이의 현재 위치, 그리고 count는 날짜를 세는 용도이다. 날이 밝았을 때 a만큼 올라간 후 현재위치(ht)를 목표위치(v)와 비교하여 도달하면 반복문을 빠져나오고, 도달하지 못한다면 밤이되어 b만큼 미끄러지는 식으로 작성하였으나 결과는 역시 시간 초과. 따라서 변수를 더 추가한 후 간단히 구할 방법을 생각해보았다. 달팽이가 하루에 올라가는 높이를 구한 후 전체 높이에서 나눈다면 간단히 몇일이 걸리는지 알 수 있다. 다만 단순히 v / (a-b) 를 하게 된다면 100 99 ..

백준알고리즘 #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의 배수부터 ..

반응형