본문 바로가기

프로그래밍/백준알고리즘14

백준 알고리즘 1003번 풀이 - 피보나치 함수 피보나치 함수에서 0과 1이 몇 번 출력되는지 구하는 문제입니다. 저기서 printf대신 zero와 one을 1씩 더해줘서 풀게되면 시간초과가 뜨게 됩니다. 7까지의 0과 1을 계산해 보면 아래와 같은 결과가 나옵니다. 1의 갯수를 보면 피보나치 수열로 증가하고 0은 n-1의 1의 갯수와 같습니다. 시간을 줄이기 위하여 n의 1의 갯수만 구하고 0의 갯수는 n-1번째 값을 입력해 주면 됩니다. import java.util.Scanner; public class Main { static int[] result = new int[41]; public static void main(String[] args) { Scanner s = new Scanner(System.in); int T = s.nextInt(.. 2019. 8. 13.
백준 알고리즘 2869번 문제 풀이 - 달팽이는 올라가고 싶다 달팽이가 올라가는데 몇일이 걸리는지 푸는 문제입니다. 달팽이가 낮에는 A만큼 올라가는데 밤에 B만큼 미끄러 지고, 정상에 올라간 후에는 미끄러지지 않는다고 합니다. 미끄러지지 않는다는 소리는 마지막은 무조건 올라갈 수 있는 거리만큼 이동할 수 있다는 말이기 때문에 높이(V) - 올라갈 수 있는 거리(M)를 해주고, 결과에 +1을 해주면 됩니다. 이제 남은 거리가 얼마나 걸리는지 계산을 해주면 됩니다. 예제인 2(A) 1(B) 5(V)로 보면 5에서 2를 빼주고 남은 거리는 3입니다. 하루가 지났을 때 위치는 A-B가 됩니다. (A만큼 올라가고 B만큼 내려오기 때문에) 남은거리 / 하루 지났을 때의 위치룰 하면 남은 위치가 얼마나 걸리는지 알 수 있습니다. 3/1을 하면 3 거기에 +1을 해주면 됩니다. .. 2019. 8. 13.
백준 알고리즘 1193번 문제 풀이 - 분수 찾기 처음 문제를 봤을 때 무슨 소리인지 한참 봤다... 아래의 사진을 보면 이해가 조금 될 것이다 지그제그 순서대로 번호가 있는 것이다. 14번 째 방에는 2/4가 있기 때문에 14를 입력 받으면 2/4가 출력되는 것이다. 이 문제를 보고 규칙을 찾으려고 한참을 생각하였다..... 분수(분자, 분모)를 구하기 위해서는 전체 데이터의 갯수와 라인의 수, 데이터의 방향(?)이 필요하다. 일단 하나씩 구하고 어디에 쓰는지 보자! 아래의 그림을 대각선으로 보면 데이터의 수가 1씩 증가한다. 1번째 라인은 1개, 2번째 라인은 2개, ....5번째 라인은 5개, ... 이것을 통해 총 데이터의 갯수를 구할 수 있다. 또, 아래의 그림을 보면 분자 또는 분모가 라인의 수와 같고, 홀수일경우 ↗쪽으로 짝수의 경우 ↙쪽으.. 2019. 8. 1.
백준 알고리즘 2292번 문제 풀이 - 벌집 육각형을 이루어진 벌집에서 N번째 벌집으로 가기위해 몇개의 방을 지나쳐야 하는지 푸는 문제입니다. 이 문제를 풀기 위하여 일정하게 증가하는 값이 있는지 찾아 보았습니다. 육각을 기준으로 하여 첫 번째는 방이 1개 두 번째는 방이 7개 (안쪽을 제외하고 겉에 있는 방의 갯수는 6개) 세 번째는 방이 19개 (안쪽을 제외하고 겉에 있는 방의 갯수는 12개) 네 번째는 방이 37개 (안쪽을 제외하고 겉에 있는 방의 갯수는 18개) 방의 갯수가 6의 배수만큼 증가하는 것을 볼 수 있습니다. 1번 방에 가려면 1개의 방을 지나면 되고, 2~7 사이에 있는 방으로 가려면 두번, 8~19 사이에 있는 방으로 가려면 세번만 이동하면 됩니다. tmp값을 1로주고, 1씩 증가하는 변수 i를 만들어 준 뒤 tmp+( 6 *.. 2019. 8. 1.