문제
https://school.programmers.co.kr/learn/courses/30/lessons/12919
나의 풀이
for문을 이용해 배열 선형 탐색
배열의 원소가 String이므로 equals 매소드 사용
1. 나의 코드
class Solution {
public String solution(String[] seoul) {
// 배열의 element를 찾는 문제
// for문을 이용한 선형 탐색
for (int i=0; i < seoul.length; i++) {
if (seoul[i].equals("Kim"))
return "김서방은 "+i+"에 있다";
}
return "";
}
}
다른 풀이
2. Arrays 클래스를 이용해 배열을 리스트로 변환 -> 값을 찾아 값의 인덱스를 얻음
import java.util.Arrays;
public class FindKim {
public String findKim(String[] seoul){
//x에 김서방의 위치를 저장하세요.
int x = Arrays.asList(seoul).indexOf("Kim");
return "김서방은 "+ x + "에 있다";
}
// 실행을 위한 테스트코드입니다.
public static void main(String[] args) {
FindKim kim = new FindKim();
String[] names = {"Queen", "Tod","Kim"};
System.out.println(kim.findKim(names));
}
}
한 줄로 쓸 수 있는게 멋있다.
리스트도 결국 선형 탐색 하므로 시간복잡도 측면에서는 1번 코드와 큰 차이가 없다.
괜히 배열 -> 리스트 변환하면서 오버헤드가 발생하는건 아닐까?
배열을 리스트로 변환하는 과정에서 약간의 오버헤드가 발생할 수 있다. 하지만 대부분의 경우 이런 오버헤드는 무시할 정도로 작다.
반면 라이브러리 매소드를 사용하여 코드의 가독성과 간결성을 향상시키는 장점이 있다.
따라서 코드의 가독성과 유지보수성을 고려할 때, 라이브러리 매소드를 사용하는 것이 배열을 직접 탐색하는 것보다 나은 선택일 수 있다. 라이브러리 매소드를 사용하면 잠재적으로 최적화된 구현을 사용할 수 있으므로 약간의 이점이 있을 수 있다.