카테고리 없음

[프로그래머스] 서울에서 김서방 찾기

hyeseong-dev 2024. 10. 14. 13:57

문제 이해

  • 목표: 주어진 문자열 배열 seoul에서 "Kim"이라는 문자열이 위치한 인덱스를 찾아, "김서방은 x에 있다" 형식의 문자열을 반환합니다.
  • 조건:
    • "Kim"은 배열에 한 번만 등장합니다.
    • 잘못된 입력은 없습니다.

자바 코드

class Solution {
    public String solution(String[] seoul) {
        int index = 0;
        for (int i = 0; i < seoul.length; i++) {
            if (seoul[i].equals("Kim")) {
                index = i;
                break; // "Kim"을 찾으면 반복문 종료
            }
        }
        return "김서방은 " + index + "에 있다";
    }
}

코드 설명

  1. index 변수 초기화: "Kim"의 인덱스를 저장할 index 변수를 0으로 초기화합니다.
  2. 배열 순회: for 문을 사용하여 seoul 배열의 모든 요소를 순서대로 확인합니다.
  3. "Kim" 찾기: 현재 요소가 "Kim"인지 비교합니다. 만약 "Kim"이라면 index에 현재 인덱스 i를 저장하고 break를 사용하여 반복문을 종료합니다.
  4. 결과 반환: "김서방은 {index}에 있다" 형식의 문자열을 반환합니다.

시간 복잡도 및 공간 복잡도

  • 시간 복잡도: O(n) - 배열의 크기에 비례하여 시간이 증가합니다. 최악의 경우 배열 전체를 순회해야 하므로 선형 시간 복잡도를 가집니다.
  • 공간 복잡도: O(1) - 추가적인 메모리 공간을 거의 사용하지 않습니다.

다른 풀이 방법

  • Java 8 Stream:
    return "김서방은 " + Arrays.asList(seoul).indexOf("Kim") + "에 있다";
    Arrays.asList를 사용하여 배열을 List로 변환하고 indexOf 메서드로 "Kim"의 인덱스를 찾습니다.

  • for-each 문:
    for (int i = 0; i < seoul.length; i++) {
        if (seoul[i].equals("Kim")) {
            return "김서방은 " + i + "에 있다";
        }
    }
    for-each 문을 사용하여 더 간결하게 코드를 작성할 수 있습니다.

선택 가이드:

  • 가독성: 일반적인 for 문을 사용하는 방법이 가장 직관적이고 이해하기 쉽습니다.
  • 간결함: Java 8 Stream을 사용하면 코드를 한 줄로 표현할 수 있어 간결하지만, 초보자에게는 다소 어려울 수 있습니다.
  • 성능: 세 가지 방법 모두 시간 복잡도는 O(n)으로 동일하며, 성능상 큰 차이는 없습니다.