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 | 31 |
Tags
- 웹개발
- Linux
- 예외처리
- 형변환
- sql문
- StringBuilder
- html
- 백엔드
- Git
- BufferedReader
- mybatis
- Java
- DML
- MySQL
- 개발자
- order by
- 프로그래밍
- 프로그래머스 sql 고득점 kit
- 스프링
- 리눅스
- 프론트엔드
- scanner
- github
- where
- select문
- 데이터 조회
- SQL
- 알고리즘
- 정보처리기사
- JavaScript
- 백준
- 입출력
- 자바스크립트
- 자바
- 정보처리기사필기요약
- select
- 메서드
- 클래스
- 프로그래머스 SQL
- String클래스
Archives
- Today
- Total
ToBe끝판왕
[ 프로그래머스 ] 1차 다트게임 - 자바( JAVA ) 본문
반응형
[ 1차 ] 다트게임
• 코딩테스트 연습 > 2018 KAKAO BLIND RECRUIMENT > [ 1차 ] 다트게임
▶ 해당 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/17682
코딩 및 문제풀이
• 자바 한 글자씩 분리하기 참고
https://baby9235.tistory.com/108#google_vignette
class Solution {
public int solution(String dartResult) {
// 점수 합계 초기화
int answer = 0;
// 배열 선언 및 크기 할당 ( 다트 기회는 3번 )
int[] scores = new int[3];
// 다트 던지는 기회
int cnt = 0;
// 점수 값 담을 변수 선언 및 초기화
int point = 0;
// 입력값 검사 ( 점수|보너스|옵션으로 이루어진 문자열 3세트)
for(int i=0; i < dartResult.length(); i++) {
// 문자열 쪼개기 ( 문자열의 인덱스 i에 해당하는 문자를 char타입으로 변환 - 한글짜식 반환 )
// for문을 통하여 i 번째 문자를 input에 대입
char input = dartResult.charAt(i);
// 점수 : 획득 가능 범위 0점 ~ 10점 영역
// isDight() 내장함수를 사용해 숫자인지 아닌지 먼저 파악
if(Character.isDigit(input) == true) {
// if문 안의 지역변수 선언 ( input 이 숫자라면 )
// input 값을 char > String > int 형번환하여 임시 변수에 담는다.
int temp = Integer.parseInt(String.valueOf(input));
// 1인 경우, 1인지 10(2자리) 인지 각각의 경우 구분 필요
if( temp == 0 && point > 0) {
// 0이 반환되지만 점수가 0보다 크다 => 10인 경우
point = 10;
scores[cnt] = point;
} else {
// 10인 경우 제외
point = temp;
scores[cnt] = point;
}
}
// 보너스 : Sigle(S), Double(D), Triple(T) 영역
// S : 1제곱 , D : 2제곱 , T : 3제곱
if( input == 'S' || input == 'D' || input == 'T') {
point = 0;
if( input == 'S') {
scores[cnt] = scores[cnt];
} else if ( input == 'D') {
scores[cnt] = scores[cnt] * scores[cnt];
} else if( input == 'T'){
scores[cnt] = scores[cnt] * scores[cnt] * scores[cnt];
}
cnt++;
}
// 옵션 : 스타상(*), 야차상(#) 영역
if(input == '*') {
// 첫번째 기회
if(cnt == 1) {
// 첫번째에 스타상이 나오면 두배
// 배열값은 기회 - 1
scores[0] = scores[0] * 2;
} else {
// 첫번째 제외하고 스타상이 나오면 각 점수 두배 > 해당점수 x 2 and 이전 점수 x 2
// 배열값은 기회 - 1
scores[cnt-1] = scores[cnt-1] * 2;
scores[cnt-2] = scores[cnt-2] * 2;
}
} else if( input == '#') {
// 아차상이 나오면 해당점수 마이너스
// 배열값은 기회 - 1
scores[cnt-1] = (-1) * scores[cnt-1];
}
}
// 최종 결과값 반복문으로 배열의 1, 2, 3 값의 합 대입
for(int i = 0; i < scores.length; i++ ) {
answer += scores[i];
}
return answer;
}
}
• 결과화면
반응형
Comments