삐까냥의 파도타기

14501번) 퇴사 본문

코딩/삼성 SW 역량 테스트 기출

14501번) 퇴사

금손형아 2018. 4. 7. 11:39

문제 출처 : 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