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
- tomcat log
- 재귀 예제
- katalon 비교
- javascript 자동완성
- 한국투자증권 해외주식 양도세
- 해외증권 양도세 한국투자증권
- katalon xpath
- 피보나치함수 예제
- oracle group by
- 재귀함수 예제
- 톰캣 실시간 로그
- 피보나치 예제
- CSTS 폭포수 모델
- katalon 자동화
- katalon 사용법
- 최대공약수 예제
- git 연동
- 국세청 해외주식 양도세 신고방식
- 테스트 자동화
- Katalon Recorder 사용법
- 피보나치함수
- 해외주식 양도세 신고
- 주식 양도세 신고방법
- katalon
- 홈택스 해외주식 양도세
- recursion example
- js 자동완성
- java.sql.SQLSyntaxErrorException
- bfs 미로탐색 java
- 한국투자증권 양도세 신고
Archives
- Today
- Total
엄지월드
백준 2303 숫자 게임 본문
문제
설명
dfs와 같이 재귀를 활용해서 전체를 탐색하도록 푸는 아이디어로 접근했다.
첫번째 간과했던 점은 같은 점수면 index가 높은 값을 구해야 했고,
두번째 간과했던 점은 재귀를 돌 때에 left, center, right와 같이 3개로 나누어서 구현했는데
right가 4까지 도달하면 center를 움직이고 left를 움직였다.
하지만 이렇게 되면 예제 케이스를 통과하지 못한다. 왜냐하면 5 5 9를 선택해야 하는데 left보다 center를 먼저 움직이면 5 5 9를 선택하지 못하기 때문이다. 그래서 right 다음에 left를 움직이고 마지막에야 center를 움직여서 처리했다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
// 2303 숫자 게임
public static void main(String[] args) throws IOException {
process();
}
static int[] arr = new int[5];
static int tempValue = -1;
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int maxUserIndex = -1;
int maxUserValue = -1;
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < 5; j++) {
arr[j] = Integer.parseInt(st.nextToken());
}
recursive(0, 1, 2);
if(maxUserValue <= tempValue) {
maxUserValue = tempValue;
maxUserIndex = i+1;
}
tempValue = 0;
}
bw.write(maxUserIndex + "");
bw.flush();
bw.close();
}
private static void recursive(int left, int center, int right) {
int sum = (arr[left] + arr[center] + arr[right]) % 10;
tempValue = Math.max(sum, tempValue);
if(right + 1 < 5) {
recursive(left, center, right+1);
} else if(left+1 < center) {
recursive(left+1, center, right);
} else if(center + 1 < right) {
recursive(left, center + 1, right);
}
}
}
'알고리즘' 카테고리의 다른 글
백준 2535 아시아 정보올림피아드 (0) | 2024.07.21 |
---|---|
백준 5555 반지 (0) | 2024.07.20 |
백준 2635 수 이어가기 (0) | 2024.07.09 |
백준 9625 BABBA (0) | 2024.07.08 |
백준 11576 Base Conversion (0) | 2024.06.29 |
Comments