문제

findKim 함수(메소드)는 String형 배열 seoul을 매개변수로 받습니다. seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하세요. seoul에 Kim은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

풀이 1

public class FindKim {
	public String findKim(String[] seoul){
		//x에 김서방의 위치를 저장하세요.
		int x = 0;
		int i = 0;    

        for(String str : seoul){
          if("Kim".equals(str)) x = i;
          else i++;
        }

		return "김서방은 "+ x + "에 있다";
	}

	// 실행을 위한 테스트코드입니다.
	public static void main(String[] args) {
		FindKim kim = new FindKim();
		String[] names = {"Queen", "Tod","Kim"};
		System.out.println(kim.findKim(names));
	}
}

워낙 쉬운 기초 문제라서 프로그래밍을 배운 사람이라면 1분이면 풀 문제이다. 풀이 1은 향상된 for문을 이용한 풀이다. 일반 for문과 크게 다를 건 없지만 인덱스 값을 따로 선언해서 써야한다. 일반 for문도 좋지만 향상된 for문은 뭔가 깔끔해 보여서 가끔씩 사용하곤 한다.

풀이 2

public class FindKim {
	public String findKim(String[] seoul){
		//x에 김서방의 위치를 저장하세요.
		int x = 0;    

        for(int i=0; i<seoul.length; ++i){
          if("Kim".equals(seoul[i])){
            x = i;
          }
        }

		return "김서방은 "+ x + "에 있다";
	}

	// 실행을 위한 테스트코드입니다.
	public static void main(String[] args) {
		FindKim kim = new FindKim();
		String[] names = {"Queen", "Tod","Kim"};
		System.out.println(kim.findKim(names));
	}
}

제일 무난하고 많은 사람들이 쓴 일반 for문이다. 딱히 설명할 부분은 없다. 그냥 seoul이라는 String 배열을 for문에 받아서 해당 length만큼 돌리면서 “Kim”과 일치하는 인덱스를 x에 저장한다.

풀이 3

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));
    }
}

제일 처음 문제를 봤을 때 indexOf를 사용할까? 싶었는데 일단은 for문을 이용해 풀었었다. 풀고나서 다른 사람의 풀이를 보니 풀이 3 방법이 제일 추천이 많더라. String 배열을 List로 변환 후 indexOf를 통해 “Kim”와 일치하는 인덱스를 찾는 방법이다. 제일 깔끔하다.