20240119 (금) 코딩일지

2024. 1. 19. 20:14TIL

정오까지 TodoApp을 마무리해서 제출하고 나머지 강의들을 들으면서 공부했다.

이후에는 평소에 하지 못했던 코드카타도 진행해봤다.

 

25. 나누어 떨어지는 숫자 배열

  • 나누어 떨어지는 숫자 배열
문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

제한사항
  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.
입출력 예arrdivisorreturn
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]
입출력 예 설명

입출력 예#1
arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.

입출력 예#2
arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.

입출력 예#3
3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.

 

생각해보기

 

일단 반복문 while과 for 중에서 조건을 더 세세하게 적을수 있는 for 문을 이용하는것이 좋아보인다.

이번엔 처음으로 forEach 문을 써볼건데 내가 이해하기로는 배열안에 있는 it 전부에 적용될 코드를 짤수 있는것처럼 보인다.

그러니까 for (it in 1..배열이름.size) { 짤 코드~~ } 를 forEach { 짤 코드~~ } 로 간단하게 표현할수 있는듯 하다.

 

답안 코드

 

class Solution {
    fun solution(arr: IntArray, divisor: Int): IntArray {
        var answer = intArrayOf()
        
        arr.forEach {   //forEach 문법
            if (it % divisor == 0) {  //배열안의 숫자가 나머지가 0이면
                answer += it  //answer 배열에 더한다
            }
        }
            answer.sort()  //기본값 asc 으로 정렬한다
            
        if (answer.isEmpty()) {  //answer 배열이 비어있으면
            answer += -1  //-1을 추가해준다
        }
        return answer
    }
}

 

26. 음양 더하기

 

문제 설명

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


제한사항
  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

입출력 예absolutessignsresult
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

입출력 예 설명

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

생각해보기

sign 배열의 i와 absolutes의 i들을 서로 연결시켜서 false 1이면 -1 true 3이면 +3 하는 식으로 결과값을 도출해내면 되는듯하다.

 

답안코드

class Solution {
    fun solution(absolutes: IntArray, signs: BooleanArray): Int {
        var answer: Int = 0
        for (i in 0 until absolutes.size) {  //일단 여기까지는 문제없이 했다.
            if (signs[i] === true) {         //여기서 오류가 많이 생겼다.
                answer += absolutes[i] //이유는 ===가 ==로 되어 있어서
            }                                        //아마 i가 String이 아닌 true false 여서 그런듯 싶다.
            else {                                // 결국 바꿔주고 코드완성
                answer -= absolutes[i]
            }
        }
        return answer
    }
}

 

오늘의 한마디 : 코드카타를 하다가 내가 생각했던 대로 코드가 완성이 되면 기분이 좋다.