문제 이해
- 목표: 주어진 문자열 배열
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 + "에 있다";
}
}
코드 설명
index
변수 초기화: "Kim"의 인덱스를 저장할index
변수를 0으로 초기화합니다.- 배열 순회:
for
문을 사용하여seoul
배열의 모든 요소를 순서대로 확인합니다. - "Kim" 찾기: 현재 요소가 "Kim"인지 비교합니다. 만약 "Kim"이라면
index
에 현재 인덱스i
를 저장하고break
를 사용하여 반복문을 종료합니다. - 결과 반환: "김서방은 {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)으로 동일하며, 성능상 큰 차이는 없습니다.