Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- katalon
- Katalon Recorder 사용법
- CSTS 폭포수 모델
- 한국투자증권 해외주식 양도세
- katalon 자동화
- 홈택스 해외주식 양도세
- katalon 비교
- 해외주식 양도세 신고
- 피보나치 예제
- 한국투자증권 양도세 신고
- tomcat log
- katalon 사용법
- 최대공약수 예제
- recursion example
- 해외증권 양도세 한국투자증권
- 재귀 예제
- 테스트 자동화
- 주식 양도세 신고방법
- katalon xpath
- js 자동완성
- oracle group by
- 피보나치함수
- 국세청 해외주식 양도세 신고방식
- git 연동
- java.sql.SQLSyntaxErrorException
- 재귀함수 예제
- 피보나치함수 예제
- javascript 자동완성
- 톰캣 실시간 로그
- bfs 미로탐색 java
Archives
- Today
- Total
엄지월드
백준 2635 수 이어가기 본문
문제
설명
너무 단순하게 풀면 시간초과가 나올 것 같아서 시도하지 못하다가
방법이 떠오르지 않아서 생각하는대로 구현해보았다.
생각한 방법은 1부터 주어진 숫자까지 모두 구하는 방법이었다.
그래서 for문을 통해서 시작하는 숫자를 i로 두고, 재귀를 통해서 끝까지 구해주었다.
결과에 배열을 출력해야 하기 때문에 list 객체를 넘겨서 조건이 맞으면 계속 add를 해주었고
size가 가장 큰 배열인지 체크해주었다.
느릴줄 알았는데 속도는 생각보다 빠르게 156ms로 나왔다.
더 효율적인 방법이 있을까 싶어서 검색해보았지만 딱히 찾지 못했다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
// 2635 수 이어가기
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
int maxSize = -1;
List<Integer> maxList = Collections.emptyList();
List<Integer> tempList;
for (int i = 1; i <= num; i++) {
// list 객체를 만들어서 재귀 진행
tempList = new ArrayList<>();
tempList.add(num);
getTempListSizeRecursive(num, i, tempList);
final int tempListSize = tempList.size();
if(maxSize < tempListSize) {
maxSize = tempListSize;
maxList = tempList;
}
}
final int maxListSize = maxList.size();
bw.write(maxListSize+ "\n");
for (int i = 0; i < maxListSize; i++) {
bw.write(maxList.get(i) + " ");
}
bw.flush();
bw.close();
}
private static void getTempListSizeRecursive(int prevNum, int nextNum, List<Integer> list) {
// 앞에수에서 뒤에수를 뺀 값을 구함.
int subtract = prevNum - nextNum;
list.add(nextNum);
if (subtract >= 0) {
getTempListSizeRecursive(nextNum, subtract, list);
} else {
// 뺸 값이 0 미만(음수)이면 재귀 종료
}
}
}
'알고리즘' 카테고리의 다른 글
백준 5555 반지 (0) | 2024.07.20 |
---|---|
백준 2303 숫자 게임 (0) | 2024.07.10 |
백준 9625 BABBA (0) | 2024.07.08 |
백준 11576 Base Conversion (0) | 2024.06.29 |
백준 4158 CD (0) | 2024.06.25 |
Comments