본문 바로가기
알고리즘/코딩 - 프로그래머스

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

by 주남2 2019. 4. 1.
반응형

문제 설명

String형 배열 seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하는 함수, solution을 완성하세요. seoul에 Kim은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

 

제한 사항

  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • Kim은 반드시 seoul 안에 포함되어 있습니다.

생각

문제의 조건이 잘 주어져서 쉬운 문제가 되었다! 김서방은 오직 한 번만 나타나며 반드시 seoul안에 포함되기 때문이다.

가장 쉬운 방법은 반복문을 사용하여 처음부터 검색을 쭉 하는 것이다. 사실 Kim이 나타나는지 확인을 해야하므로 전체 탐색은 필요하지만 어떤 식으로 탐색하냐가 중요한 것 같다!!

 

이 문제를 풀 당시(약 한달전..)에는 라이브러리에 대해 잘 몰라서 단순하게 전체 탐색을 하는 방법을 사용했지만 이제는 다른 방법을 알았다! 그 방법을 뒤에서 사용해 보도록 하겠다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
      public String solution(String[] seoul) {
          String answer = "";
          
          int index = -1;
          for(int i=0; i<seoul.length; i++) {
              if(seoul[i].equals("Kim")) {
                  index = i;
                  break;
              }
          }
          
          answer = "김서방은 " + index + "에 있다";
          
          return answer;
      }
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

코드 그대로 처음부터 seoul배열을 처음부터 끝까지 탐색하여 만약 Kim과 같은 요소가 있다면 그 인덱스로 i를 바꿔주는 방법을 사용했다. 후에 김서방의 위치를 알려주는 answer을 만들어 주면 된다. 간단한 문제지만 Arrays를 이용하면 코드를 더욱 줄일 수 있다! 먼저 키값에 맞는 인덱스를 알려주는 Arrays.indexOf(String str)이라는 메소드가 있다. 하지만 이 메소드를 사용하기 위해서는 배열을 List로 바꿔주어야 하는데 이 또한 간단하게 Arrays.asList()를 사용하도록 하자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.*;
 
class Solution {
      public String solution(String[] seoul) {
          String answer = "";
          
          int index = Arrays.asList(seoul).indexOf("Kim");
          
          answer = "김서방은 " + index + "에 있다";
          
          return answer;
      }
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

이 방법을 사용하면 정말 간단하게 줄일 수 있다. 항상 문제를 단순히 푸는 것만이 아닌 더 좋은 방법 (정확성, 효율성)을 생각하는 버릇을 키워야겠다.

반응형