본문 바로가기
Java/알고리즘

[프로그래머스/알고리즘] 서울에서 김서방 찾기 (자바/Java)

by 전재경 2022. 11. 21.

문제 설명

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

 

제한 사항

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

 

Step1. 문제분석 

문자열에서 Kim을 찾아 그 위치값만 넣고 리턴하면 된다.

 

 

Step2. 문제풀이 코드

우선 내가 생각한대로 코드를 작성하려 했는데 문자열에서 위치를 찾는 법 indexOf에 대해 공부해 보았다.

그런데 무작정 indexOf를 사용하니 당연히 값이 안나왔다. 

String[] seoul 에서 무작정 seoul만 넣어서 값을 찾으려 하니 당연히 찾을 수 없는 값이였고

seoul 이라는 문자열 배열을 리스트로 정렬해서 indexOf로 찾아야 했다.

그래서 Arrays.asList를 찾아서 적용하니 내가 생각하던 방향으로 해결이 됐다.

import java.util.Arrays;

class Solution {
    public String solution(String[] seoul) {

        
        int index = Arrays.asList(seoul).indexOf("Kim");
        
        return "김서방은 " + index + "에 있다";
    }
}

 

 

하지만 단점이 확실했다.

굳이 이렇게 하게 된다면 공간적 손해를 보며 성능상 for문을 이용한 것 보다 좋지 않다는 것이였다.

이럴 경우는 그냥 for문으로 해결을 하는 것이 성능적으로 봤을 때 더 좋았을 것이라는 판단이 든다.

 

Step3. 다른 사람의 풀이 코드

public class FindKim {
    public String findKim(String[] seoul){
        //x에 김서방의 위치를 저장하세요.
        int x = 0;
    for(int i = 0; i < seoul.length; i++){
        if(seoul[i].equals("Kim")){
        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문으로 문자열의 길이만큼 확인한 뒤 그냥 있으면 1이라는 값만 변수에 담고 리턴하면 되니

굳이 어렵게 생각할 필요가 없었다.

equals로 문자열에 "Kim"이라는 문자열이 있는지 있으면 1을 담고 리턴

오히려 더 간단하고, 더 성능적으로 좋은 방법이였다.

 

public class FindKim {
    public String findKim(String[] seoul){
        //x에 김서방의 위치를 저장하세요.
        int x = 0;
    while(x<seoul.length){
      if(seoul[x] == "Kim")
        break;
      else x++;
    }


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

그리고 while문을 통해 하는 방법도 있었는데 이 방법도 생각하지 못한 법이라 신선했다.

 

댓글