[프로그래머스] 왼쪽 오른쪽

devel_liz·2025년 1월 16일
0

코딩테스트

목록 보기
45/45

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(strList: Array<String>): Array<String> {
        // "l"과 "r"의 인덱스를 찾음
        val lIndex = strList.indexOf("l")
        val rIndex = strList.indexOf("r")

        // "l"과 "r" 중 먼저 나오는 문자열에 따라 결과 반환
        return when {
            lIndex in strList.indices && (rIndex !in strList.indices || lIndex < rIndex) -> {
                strList.copyOfRange(0, lIndex)
            }
            rIndex in strList.indices -> {
                strList.copyOfRange(rIndex + 1, strList.size)
            }
            else -> {
                arrayOf() // "l"과 "r"이 모두 없는 경우 빈 배열 반환
            }
        }
    }
}

📝 다른 사람의 문제 풀이

class Solution {
    fun solution(strList: Array<String>): Array<String> {
        if (!strList.contains("r") && !strList.contains("l")) return emptyArray()
        if (strList.contains("l") && (!strList.contains("r") || strList.indexOf("l") < strList.indexOf("r"))) return strList.sliceArray(0 until strList.indexOf("l"))
        if (strList.contains("r") && (!strList.contains("l") || strList.indexOf("r") < strList.indexOf("l"))) return strList.sliceArray((strList.indexOf("r") + 1) until strList.size)
        return emptyArray()
    }
}

🖊 문제 풀이 시 알면 좋을 것

  • indexOf

    • 특정 요소가 배열에 존재하면 해당 요소의 첫 번째 인덱스를 반환.
    • 요소가 없으면 -1 반환.
      val index = arrayOf("a", "b", "c").indexOf("b") // 결과: 1
      val notFound = arrayOf("a", "b", "c").indexOf("d") // 결과: -1
  • contains

    • 배열에 특정 요소가 포함되어 있는지 확인.
    • 반환값: true 또는 false.
      val hasElement = arrayOf("a", "b", "c").contains("b") // 결과: true
      val notFound = arrayOf("a", "b", "c").contains("d") // 결과: false
  • when 표현식

    • 여러 조건을 분기 처리할 때 간결하고 읽기 좋은 구문.
    • 조건문 대신 사용 가능.
      val x = 10
      val result = when {
        x > 5 -> "Greater than 5"
        x == 5 -> "Equal to 5"
        else -> "Less than 5"
      }
  • emptyArray

    • 빈 배열 생성 시 사용.
    • 배열에 아무것도 반환할 필요가 없을 때 유용.
    val empty = emptyArray<String>() // 결과: []
    
  • sliceArray

    • 배열의 특정 범위를 추출하여 새로운 배열을 반환합니다.
    • 범위는 IntRange 또는 until 키워드로 지정.
    • 인덱스 포함 여부:
      • 시작 인덱스는 포함.
      • 끝 인덱스는 포함.
        val array = arrayOf("a", "b", "c", "d")
        val result = array.sliceArray(0..2) // ["a", "b", "c"] (인덱스 0, 1, 2 포함)
        val result2 = array.sliceArray(1 until 3) // ["b", "c"] (인덱스 1, 2 포함)
  • copyOfRange

    • 배열의 시작 인덱스와 끝 인덱스를 지정하여 새로운 배열을 반환합니다.
    • 인덱스 포함 여부:
      • 시작 인덱스는 포함.
      • 끝 인덱스는 포함되지 않음.
        val array = arrayOf("a", "b", "c", "d")
        val result = array.copyOfRange(0, 3) // ["a", "b", "c"] (인덱스 0, 1, 2 포함, 3은 제외)
        val result2 = array.copyOfRange(1, 3) // ["b", "c"] (인덱스 1, 2 포함, 3은 제외)

sliceArray vs copyOfRange

특징sliceArraycopyOfRange
범위 지정 방식IntRange 또는 until 사용시작 인덱스와 끝 인덱스 명시
시작 인덱스 포함포함포함
끝 인덱스 포함포함포함되지 않음
반환 타입원본 배열과 동일한 타입의 배열 반환원본 배열과 동일한 타입의 배열 반환
예제 결과sliceArray(0..2) -> ["a", "b", "c"]copyOfRange(0, 3) -> ["a", "b", "c"]
profile
Android zizon

0개의 댓글

관련 채용 정보