ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1/14기록 - 프로그래머스 카카오 코테 #1
    Algorithm 2022. 1. 14. 11:05
    728x90

    알고리즘 스터디에서 카카오 코딩테스트 문제를 풀어보자는 말을 듣고, 프로그래머스에서 2018 level1 다트 게임 문제를 도전해 보았다. 

    카카오는 카카오다... 거의 죽는 줄 알았다. 문제도 길고 내용 이해가 되었는데 내 마음대로 구현하니 실행도 안 되고 프로그래머스 특성상 밑줄도 안 그어지고...... 총체적 난국 2시간 반만에 문제를 풀었다. 이래가지고 카카오 도전도 못할듯...ㅠㅠ

     

    여튼 문제로 들어가보자.

     

     

    일단 문제부터 엄청나게 길다. 처음에는 조건을 읽다가 무슨 소리야 하면서 입출력 예제와 비교해 가며 읽어보니 문제가 이해가 되었다.

     

    간단하게 정리해보면

    1. 숫자 0~9는 그대로 숫자를 적는다.

    2. S는 1제곱, D는 2제곱, T는 3제곱을 해 준다.

    3. #은 해당 수에 -1을 곱한다.

    4. *은 해당 수와 바로 앞의 수에 2를 곱한다. 

    5. #과 *은 중첩해서 적용된다.

    6. 얻은 기회 3번을 모두 더 해서 answer로 출력하면 된다.

     

    이정도 규칙을 가지고 있다. 이것을 구현하기 위해 주어진 매개변수를 보면 String 형태이다. 이것이 이 문제를 푸는 가장 중요한 key라고 할 수 있다. 문제에 주어진 조건들을 만족하기 위해서는 String 형태의 문자열을 하나씩 떼어 내어 char형태로 나타내어야 하고, 숫자는 제곱이 되도록 int형으로 만들어주어야만 한다.

     

    **알고리즘 생각

     

    1. 기회 3번을 나타내는 arr배열 생성

    2. 하나씩 자른 char를 모두 담을 비어있는 String temp변수 선언

    3. String을 하나씩 잘라서 모두 볼 수 있도록 메소드 dartResult.charAt()과 dartResult.length()길이의 for문을 사용

    4. 자른 char형 문자가 숫자 0~9면 해당 값을 String.valueof() 메소드를 이용해서 비어 있는 temp변수에 담음

    5. 자른 char형 문자가 S,D,T 이면 String 타입의 temp를 Integer.parseInt()로 int형 변환시켜 주고 해당 값을 arr배열을 키워주면서 제곱형태로 표현

    6. 자른 char형 문자가 #, * 이면 -1곱, 2곱으로 각각 표현해줌.

    7. 세 번의 기회를 담은 arr 배열을 answer에 담아준다.

     

     

     

    알고리즘을 통해 풀었는데 무려 2시간 반이나 걸렸다...

    계속 놓치고 있던 포인트가 몇 가지 있는데

     

    1. S,D,T가 지나갈 때 마다 arr[index++]을 해주어야 한다는 점. index가 계속 커지면서 더해져야 하기 때문에 index++로 표현을 해주지 않으면 계속 하나의 index에 새로운 값이 담기면서 값이 달라지게 된다.

     

    2. temp변수를 다시 S,D,T이후 비워줘야 한다는 점. 비워주지 않으면 누적되어 들어가기 때문에 마지막에 다시 비워주고 새로운 char를 받는 형태가 되어야 한다.

     

    3. *모양 char가 출력될 때 앞자리 수에 *2를 해주는 방식에서 if(index >= 2)로 다시 나누어 주지 않으면 index가 벗어나게 되는 경우가 발생하게 된다.

     

    생각보다 level 1 임에도 불구하고 까다롭고 디테일한 부분들이 많이 존재했다. 역시 카카오... ㄷㄷ

     

    **charAt(index) : 문자열에서 해당 index 값의 문자를 char형태로 만들어주는 메소드.

     

    **String.valueof(i) : char형태인 i를 String형태로 만들어주는 메소드

    728x90
Designed by Tistory.