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
- recursion example
- 해외증권 양도세 한국투자증권
- katalon 사용법
- 홈택스 해외주식 양도세
- 재귀 예제
- 한국투자증권 해외주식 양도세
- Katalon Recorder 사용법
- katalon xpath
- tomcat log
- katalon 자동화
- 국세청 해외주식 양도세 신고방식
- 주식 양도세 신고방법
- 톰캣 실시간 로그
- js 자동완성
- 재귀함수 예제
- 피보나치 예제
- CSTS 폭포수 모델
- 한국투자증권 양도세 신고
- git 연동
- 해외주식 양도세 신고
- javascript 자동완성
- 피보나치함수
- katalon 비교
- 피보나치함수 예제
- bfs 미로탐색 java
- 최대공약수 예제
- oracle group by
- java.sql.SQLSyntaxErrorException
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