✏20240312 화요일
- 주어진 조건 그대로를 따라 변수 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 금요일
- 주어진 조건 그대로를 따라 변수 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을 사용한 풀이가 깔끔해 보인다.