[프로그래머스] lv1 모음

Sdoubleu·2024년 1월 9일
0

프로그래머스

목록 보기
33/34
post-thumbnail

행렬의 덧셈

문제

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

입출력 예시

내가 쓴 풀이

class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
        val answer = mutableListOf<IntArray>()
         
        for (i in 0 until arr1.size) {
            val row = IntArray(arr1[i].size)
            for(j in 0 until arr1[i].size) {
                row[j] = arr1[i][j] + arr2[i][j]
            }
            answer.add(row)
        }
         
        return answer.toTypedArray()
    }
}

Array를 사이즈에 맞게 생성하지 않고 더하려고 할 때 마다
IntArray를 만들어서 값을 계산 후에 mutableList에 더해준다

answer의 현재 타입이 mutableList이기 때문에 반환 시에는
Array로 타입 변환을 한다

다른 사람 풀이

class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
 
        var answer = Array(arr1.count()) {IntArray(arr1[0].count(), {0})}
        
        for (i in arr1.indices) {
            for (j in arr1[i].indices) {
                answer[i][j] = arr1[i][j] + arr2[i][j]
            }
        }
        
        return answer
    }
}

Array를 사이즈에 맞게 생성 후 계산된 값을 인덱스에 넣어주고 반환한다


크기가 작은 부분 문자열

문제

숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

제한 사항

1 ≤ p의 길이 ≤ 18
p의 길이 ≤ t의 길이 ≤ 10,000
t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

입출력 예시

내가 쓴 풀이

class Solution {
    fun solution(t: String, p: String): Int {

        val com = mutableListOf<Long>()
        
        for(i in 0 .. t.length - p.length){
            var num = ""
            for(j in 0 until  p.length) num += t[i+j].toString()
            com.add(num.toLong())
        }
        
        return com.filter { i -> i <= p.toLong()}.count()
    }
}

p의 길이대로 범위를 나눌 배열을 생성 후 값을 대입
filter를 이용하여 비교값과 비교 후 카운트 값 리턴

처음엔 int로 생성하였는데 런타임 오류가 발생하여서 Long으로 수정

다른 사람 풀이

class Solution {
    fun solution(t: String, p: String): Int {
        return (0..t.length - p.length)
            .map{ t.substring(it until it + p.length) }
            .count { it <= p }
    }
}

substring을 이용하여 값을 분리 후 count안에 조건식을 넣어서 만족하는 값을 반환해줬다

📌 참고 자료

kotlin - subString 공식 문서
kotlin 문자열 자르기, 문자열 분할


삼총사

문제

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.

제한 사항

  • 3 ≤ number의 길이 ≤ 13
  • -1,000 ≤ number의 각 원소 ≤ 1,000
  • 서로 다른 학생의 정수 번호가 같을 수 있습니다.

입출력 예시

내가 쓴 풀이

class Solution {
    fun solution(number: IntArray): Int {
        val result = mutableListOf<Int>()
        
        for (i in 0 until number.size -2 ){
            for (j in i + 1 until number.size -1) {
                for (k in j + 1 until number.size) {
                    result.add(number[i] + number[j] + number[k])
                }
            }
        }
        
        return result.count{it == 0}
    }
}

두 개 뽑아서 더하기

문제

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예시

내가 쓴 풀이

class Solution {
    fun solution(numbers: IntArray): IntArray {
        val result = mutableListOf<Int>()
        
        for (i in 0 until numbers.size) {
            for (j in i + 1 until numbers.size) {
                result.add(numbers[i] + numbers[j])
            }
        } 
        return result.toHashSet().sorted().toIntArray()
    }
}

삼총사 문제와 비슷하지만 오름차순으로 담아 return 해야한다는 점을 잊지 말아야 한다


profile
개발자희망자

0개의 댓글