https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
정말.. 어려웠어요..ㅠㅠ
0.25초라는 시간제한때문에 일반적으로 풀면 안되고 DP를 사용해야 하더라고요!
저는 이 문제 공부하면서 DP에 대해서 처음 배웠어요 이렇게 성장하는 거겠죠..!
DP가 간단하게 말하면, 전에 사용했던 값이 있다면 이를 저장. 재사용해서 탐색 시간을 많이 줄이는 방법인 것 같아요!
저도 자세히는 모르겠지만.. 틀렸다면 말해주세요~!
저도 처음에는 그냥.. 평범한 피보나치겠거니하고 재귀를 맘껏 돌려서 했더니 무조건 시간초과 뜨더라고요..!
배열을 사용해서 전에 사용했던 값을 하나하나 다 저장해서 새로운 값을 구할때 한번만의 연산으로 구할 수 있도록 했어요
거기다 입력이 40과 같거나 작은 수라고 해서 이를 미리 채워두고, 값을 출력할 때는 배열에서 바로 가져올 수 있게 했습니다
알고리즘을.. 전처럼 짜긴 짰지만 이대로 풀면 무조건 시간초과니까..!
문제가 이해 안되시는 분들만 보시고 코드짜실 땐 참고하시면 안 될 것 같아요 ㅎㅎ
수많은 시간초과와.. 수많은 입력 오류와 오타와 등등..의 연산을 해치고 성공했습니다..ㅎㅎ
그리고 저 3연속 틀렸습니다는.. 이상하게 참조를 해서 1을 넣었을때 오류가 났더라고요..
그것도 모르고 모범답안이랑 1~40까지 하나하나 비교해보고.. 그랬어요
저 첫번째 맞았습니다..는 ㅋㅋ 모범답안을 의심하고 뭔가 테스트케이스가 바뀐게 아닐지 넣어본.. 결과랍니다..^^
항상 이렇게 기본적인 것에서 많이 실수를 하는것 같아요😂😂
그럼 전 4일차로 돌아올게요!! 빠잉
작성 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import java.io.*; import java.util.Arrays; public class B1003 { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //N은 무조건 40보다 작다고 해서 배열을 미리 채워두기 int[] zero=new int[41]; Arrays.fill(zero, -1); zero[0]=1; zero[1]=0; int[] one=new int[41]; Arrays.fill(one, -1); one[0]=0; one[1]=1; // 배열이 완성되어있지 않을 때(즉 값이 -1)만 k-1,k-2 값을 더해 배열을 채우기 for(int k=0;k<41;k++) { if(zero[k]==-1) { zero[k]=zero[k-1]+zero[k-2]; } if(one[k]==-1) { one[k]=one[k-1]+one[k-2]; } } //실제 값 구할 때는 n-1+n-2만 더하기 int n=Integer.parseInt(br.readLine()); String[] result=new String[n]; for(int i=0;i<n;i++) { int input=Integer.parseInt(br.readLine()); if(input==0) result[i]="1 0"; else if(input==1) result[i]="0 1"; else { result[i]=(zero[input-1]+zero[input-2])+" "+(one[input-1]+one[input-2]); } } for(int l=0;l<n;l++) { System.out.println(result[l]); } } } | cs |
'PS 공부' 카테고리의 다른 글
백준 5일차 : 백준 2775번 부녀회장이 될테야 (0) | 2023.02.23 |
---|---|
백준 4일차 : 백준 1316번 그룹 단어 체커 (0) | 2023.02.21 |
백준 2일차 : 백준 11866번 요세푸스 문제 0 (0) | 2023.02.19 |
백준 0일차 : 백준 2839번 설탕 배달 (java11) (0) | 2023.02.18 |
백준 0일차 : 백준 10845 큐 (java11) (0) | 2023.02.18 |