삐까냥의 파도타기
14501번) 퇴사 본문
문제 출처 : https://www.acmicpc.net/problem/14501
생각한 의도대로 작동하지는 않았지만, 시험 결과를 위한 코드
처음 의도 -> 일주일의 봉급 계산이 끝나고 나서 결과값을 비교 한 후 max 정하기.
코드 -> 하루하루 계산할 때 마다 결과값을 비교하여 max 정하기.
2018년 4월 7일 - 다듬지 않은 코드 (소요시간 : 29분) import java.util.Scanner; public class Q14501 { static int result = 0, finalDay; static int[][] schedules;
public static void main(String[] args) { Scanner sc = new Scanner(System.in); finalDay = sc.nextInt(); schedules = new int[2][finalDay]; for (int i = 0; i < finalDay; i++) { schedules[0][i] = sc.nextInt(); schedules[1][i] = sc.nextInt(); } result = 0; for (int i = 0; i < finalDay; i++) { choiceWork(i, 0); } System.out.println(result); } static void choiceWork(int today, int tempResult) { //오늘의 일을 할 수 있으면 if (today < finalDay && today + schedules[0][today]-1 < finalDay) { tempResult += schedules[1][today]; // System.out.println(today + " " + tempResult); today += schedules[0][today];
if (result < tempResult) { result = tempResult; } } else { return; }
for (int i = today; i < finalDay; i++) { choiceWork(i, tempResult); } } } |
디버깅 결과 코드 방식이 맞았습니다.
today가 finalDay를 넘기게 될 경우
choiceWork의 포문이 돌아가지 않게 되고,
max값을 가지고 있어도 max를 삽입할수 없게 되네요.
시험에서는 매번 max값을 삽입하는 방식이 더욱 더 안전합니다.
2018년 4월 7일 - 다듬은 코드 import java.util.Scanner; public class Q14501 { static int result = 0, finalDay; static int[][] schedules;
public static void main(String[] args) { Scanner sc = new Scanner(System.in); finalDay = sc.nextInt();
schedules = new int[2][finalDay]; for (int i = 0; i < finalDay; i++) { schedules[0][i] = sc.nextInt(); schedules[1][i] = sc.nextInt(); }
for (int i = 0; i < finalDay; i++) { choiceWork(i, 0); } System.out.println(result); } static void choiceWork(int today, int tempResult) { //오늘의 일을 할 수 있으면 int nextDay = today; if (today < finalDay && today + schedules[0][today]-1 < finalDay) { nextDay += schedules[0][today]; tempResult += schedules[1][today]; if (result < tempResult) { result = tempResult; } } else { return; }
for (int i = nextDay; i < finalDay; i++) { choiceWork(i, tempResult); } } } |
2018년 4월 12일 - 다듬지 않은 코드 (소요시간 20분) import java.util.Scanner; public class Q14501 {
static int[][] days; static int size, result = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); size = sc.nextInt();
days = new int[size][2]; for (int i= 0 ; i < size; i++) { days[i][0] = sc.nextInt(); days[i][1] = sc.nextInt(); }
for (int i = 0; i < size; i++) { calResult(i, 0); }
System.out.println(result); }
static void calResult(int nowDay, int tempResult) { int finishDay = nowDay + days[nowDay][0] - 1; if (finishDay < size) { //가능 하면 tempResult += days[nowDay][1];
if (finishDay < size-1) { for (int i = finishDay+1; i < size; i++) { calResult(i, tempResult); } return; } }
if (result < tempResult) { result = tempResult; } } }
|
'코딩 > 삼성 SW 역량 테스트 기출' 카테고리의 다른 글
14500번) 테트로미노 (0) | 2018.04.08 |
---|---|
14499번) 주사위 굴리기 (0) | 2018.04.08 |
14891번) 톱니바퀴 (0) | 2018.04.07 |
14888번) 연산자 끼워넣기 (0) | 2018.04.06 |
14503번) 로봇 청소기 (0) | 2018.04.06 |