티스토리 뷰
💻JAVA 코드 바로보기
문제 설명
두 학생 A와 B는 계단 게임을 하였습니다.
계단 게임의 규칙은 아래와 같습니다.
1. 계단 제일 아래에서 게임을 시작합니다. (0번째 칸)
2. 가위바위보를 합니다.
3. 이기면 계단 세 칸을 올라가고, 지면 한 칸을 내려가고, 비기면 제자리에 있습니다.
4. 계단 제일 아래에서 지면 제자리에 있습니다.
5. 2~4 과정을 열 번 반복합니다.
A와 B가 계단 게임을 완료한 후에, A가 계단 위 몇 번째 칸에 있는지 파악하려고 합니다.
A와 B가 낸 가위바위보 기록이 순서대로 들어있는 배열 recordA와 recordB가 매개변수로 주어질 때, 게임을 마친 후의 A의 위치를 return 하도록 solution 메소드를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _한 줄_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
매개변수 설명
A와 B가 낸 가위바위보 기록이 순서대로 들어있는 배열 recordA와 recordB가 매개변수로 주어집니다.
- recordA와 recordB의 원소는 0, 1, 2중 하나이고 순서대로 가위, 바위, 보를 의미합니다.
- recordA와 recordB의 길이는 10입니다.
return 값 설명
solution 메소드는 계단 게임을 마친 후에 A가 계단 위 몇 번째 칸에 위치하는지를 return 합니다.
- 계단 제일 아래 칸은 0번째 칸입니다.
예시
recordA | recordB | return |
[2,0,0,0,0,0,1,1,0,0] | [0,0,0,0,2,2,0,2,2,2] | 14 |
예시 설명
recordA | 보 | 가위 | 가위 | 가위 | 가위 | 가위 | 바위 | 바위 | 가위 | 가위 |
recordB | 가위 | 가위 | 가위 | 가위 | 보 | 보 | 가위 | 보 | 보 | 보 |
result | 0 | 0 | 0 | 0 | +3 | +6 | +9 | +8 | +11 | +14 |
주어진 코드
package Set01;
class Q6{
public int func(int record){
if(record == 0) return 1;
else if(record == 1) return 2;
return 0;
}
public int solution(int[] recordA, int[] recordB){
int cnt = 0;
for(int i = 0; i < recordA.length; i++){
if(recordA[i] == recordB[i])
continue;
else if(recordA[i] == func(recordB[i]))
cnt = cnt + 3;
else
cnt = cnt - 1;
}
return cnt;
}
// The following is main method to output testcase. The main method is correct and you shall correct solution method.
public static void main(String[] args) {
Q6 sol = new Q6();
int[] recordA = {2,0,0,0,0,0,1,1,0,0};
int[] recordB = {0,0,0,0,2,2,0,2,2,2};
int ret = sol.solution(recordA, recordB);
// Press Run button to receive output.
System.out.println("Solution: return value of the method is " + ret + " .");
}
}
코드 분석
//record를 이기는 결과 반환 (record : 가위, result : 바위)
public int func(int record){
if(record == 0) return 1;
else if(record == 1) return 2;
return 0;
}
public int solution(int[] recordA, int[] recordB){
//A의 계단 위치
int cnt = 0;
//10번 반복 (5번 항목)
for(int i = 0; i < recordA.length; i++){
//비겼을 경우 제자리
if(recordA[i] == recordB[i])
continue;
//이겼을 경우 +3칸
else if(recordA[i] == func(recordB[i]))
cnt = cnt + 3;
//졌을 경우 -1칸
else
cnt = cnt - 1;
}
return cnt;
}
func함수를 보고 조금 감동이었다. 저런 멋진방법이 있었다니!!
잘못된 코드를 실행시키면 다음과 같은 결과가 나온다.
0번째가 -1인 점을 보면 우리는 바로 잘못된 부분이 어디인지 알아낼 수 있다.
문제 항목 4번, 계단 가장 아래에서 지면 제자리에 있습니다. 을 참고하자.
따라서 else문을
else if(cnt!=0)
cnt = cnt - 1;
위와 같이 수정했다.
정답 코드
//record를 이기는 결과 반환 (record : 가위, result : 바위)
public int func(int record){
if(record == 0) return 1;
else if(record == 1) return 2;
return 0;
}
public int solution(int[] recordA, int[] recordB){
//A의 계단 위치
int cnt = 0;
//10번 반복 (5번 항목)
for(int i = 0; i < recordA.length; i++){
//비겼을 경우 제자리
if(recordA[i] == recordB[i])
continue;
//이겼을 경우 +3칸
else if(recordA[i] == func(recordB[i]))
cnt = cnt + 3;
//졌을 경우 -1칸
else if(cnt!=0)
cnt = cnt - 1;
}
return cnt;
}
YBM 정답 코드
public int func(int record){
if(record == 0) return 1;
else if(record == 1) return 2;
return 0;
}
public int solution(int[] recordA, int[] recordB){
int cnt = 0;
for(int i = 0; i < recordA.length; i++){
if(recordA[i] == recordB[i]) continue;
else if(recordA[i] == func(recordB[i])) cnt += 3;
else cnt = Math.max(0, cnt - 1);
}
return cnt;
}
멋진 방법이다....
else cnt = Math.max(0, cnt - 1);
KimSky904 - Overview
Department of New Media Software. KimSky904 has 28 repositories available. Follow their code on GitHub.
github.com
'[코테] > [YBM-sample]' 카테고리의 다른 글
[Cospro Java 1급] 1차 8번_배달서비스 구현하기 (0) | 2022.01.21 |
---|---|
[Cospro Java 1급] 1차 7번_주식 사고팔기 (0) | 2022.01.20 |
[Cospro Java 1급] 1차 5번_가장 많이 득표한 후보 (0) | 2022.01.18 |
[Cospro Java 1급] 1차 4번_두개의 오름차순 배열 합치기 (0) | 2022.01.17 |
[Cospro Java 1급] 1차 3번_나이트(knight)의 이동가능 횟수 계산 (0) | 2022.01.16 |
- 코딩테스트
- cospro기출
- lv1
- programmers
- 구름에듀 기출문제
- 구름에듀
- Cos Pro
- 기출문제
- C
- lv2
- YBM
- COSPRO 2급
- YBM기출
- c언어 기출문제
- 알고리즘
- 프로그래머스
- groom
- c언어
- 연습문제
- 1급
- 배열
- 코스프로
- Java
- C++
- 구름 기출문제
- 자바
- groomedu
- cospro기출문제
- 배열활용문제
- CosPro
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |