[Kotlin/프로그래머스] 24년 3월 2주차 코드카타정리

지혜·2024년 3월 12일

Code_Kata

목록 보기
16/16

✏20240312 화요일

📖배열 만들기 4

  • 주어진 조건 그대로를 따라 변수 i를 만들어 초기값을 0으로 설정한 후, i가 arr의 길이보다 작으면 다음 작업을 반복할 수 있도록 while문을 만든다.
  • while문 안에서 when문을 통해 제시되는 조건을 수행한다.
class Solution {//나의 풀이
    fun solution(arr: IntArray): IntArray {
        var stk: IntArray = intArrayOf()
        var i = 0
        while (i < arr.size) {
            when {
                stk.isEmpty() || stk.last() < arr[i] -> {
                    stk += arr[i]
                    i++
                }
                stk.last() > arr[i] || stk.last() == arr[i] -> 
                    stk = stk.dropLast(1).toIntArray()
            }
        }
        return stk
    }
}
  • 맨 처음에 아무생각없이 removeLast()를 썼다가 동적배열이 아니여서 오류를 만났다.
  • 다른 사람들의 풀이를 보니 스택의 특성을 살려서 작성한 풀이가 많았는데, 요즘 깃허브쓰면서 맨날 stash 할 때 pop apply를 많이 썼는데, 추가할 때 push를 쓴다는 것을 새삼 한 번 더 되새길 수 있었던 것 같다.

✏20240314 목요일

📖문자열 계산하기

  • 띄어쓰기를 기준으로 문자열을 분리하고, answer에 식의 시작 숫자를 담아둔다.
  • for문으로 arr을 돌면서 기호에 맞춰 기호 뒤에 요소를 answer에 더하거나 뺀 후 answer을 반환한다.
class Solution {//나의 풀이
    fun solution(my_string: String): Int {
        val arr= my_string.split(" ")
        var answer: Int = arr[0].toInt()
        for(c in arr.indices){
            if(arr[c] == "+") {
                answer += arr[c+1].toInt()
            } else if(arr[c] == "-"){
                answer -= arr[c+1].toInt()
            }
        }
        return answer
    }
}
  • 처음에는 예문이 "3 + 4" 뿐이라서 반복문 없이 바로 arr[0] arr[1] arr[2]로만 따져서 arr[1]의 기호를 when문으로 판단해서 풀었다. 너무 쉬운데?라고 생각하자마자 테스트만 통과하고 제출하니까 실패 폭탄을 받았다.ㅎ
  • my_string에는 연산자가 적어도 하나 포함되어 있습니다. 이 문구가 그냥 연산식 오류가 없다는 얘기인 줄 알았는데, 연산자가 둘 이상일 수도 있다는 말인줄은 몰랐다.. 여튼 오류를 발견하고 연산자가 여러개라고 해서 반복문을 통해 풀리도록 식을 바꿨다.

✏20240315 금요일

📖배열 만들기 6

  • 주어진 조건 그대로를 따라 변수 i를 만들어 초기값을 0으로 설정한 후, i가 arr의 길이보다 작으면 다음 작업을 반복할 수 있도록 while문을 만든다.
  • while문 안에서 when문을 통해 제시되는 조건을 수행한다.
class Solution {//나의 풀이
    fun solution(arr: IntArray): IntArray {
        var answer: IntArray = intArrayOf()
        var i = 0
        while(i < arr.size) {
            when {
                answer.size == 0 || answer.last() != arr[i] -> {
                    answer += arr[i]
                    i++
                }
                answer.last() == arr[i] -> {
                    answer = answer.dropLast(1).toIntArray()
                    i++
                }
            }
        }
         if(answer.size == 0) {
             answer += -1
         }
        return answer
    }
}
  • 배열만들기4와 똑같은 문제 그 때 헤매었던 풀이를 이번엔 단번에 풀 수 있었다. 다만 배열만들기4 때도 말했던 것 처럼 역시 다음에도 비슷한 문제를 만나면 그 땐 꼭 stack을 활용하여 문제를 풀어야겠다.
  • 다른 사람의 풀이를 봤을 때 java.util.*을 임포트하긴 했지만 어쨌든 push와 pop을 사용한 풀이가 깔끔해 보인다.
profile
파이팅!

0개의 댓글