[JAVA]프로그래머스 1단계 : 서울에서 김서방 찾기

https://programmers.co.kr/learn/courses/30/lessons/12919

문제

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

제한 사항

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

풀이

  • ArrayList를 사용해서 indexof()로 해당 인덱스 번호를 갖고오도록 했다.
import java.util.ArrayList;

public class Soultion1 {
	public String solution(String[] seoul) {
        String answer = null;
        String lname = "Kim";
        
        ArrayList<String> list = new ArrayList<String>();
        
        for(String s : seoul) {
        	list.add(s);
        }        
        
        for(int i=0; i<seoul.length; i++) {
        	if(lname == list.get(i).toString()) {
        		answer += "김서방은 "+i+"에 있다";
        	}
        }
        return answer;
	}
  }

이클립스에서는 실행결과가 잘나오는데, 프로그래머스에서는 다음과 같이 통과되지 못했다.이유가 뭘까?

문제점 발견!

1) 문자열끼리 비교할 땐 equals 메소드를 활용해야 한다

파이썬이나 js와 다르게 ==을 이용한 문자열 비교가 불가능하다. 그래서 ==을 할 경우 주소값을 비교하게 된다.

정리

  • equals 메소드는 비교하고자 하는 대상의 내용 자체를 비교
  • == 연산자는 비교하고자 하는 대상의 주소값을 비교

2) =과 +=의 차이

String은 위에서 넣어준 null 문자열을 보고 이어붙이기를 한다.
그래서 결과가 null김서방은 1에 있다. 가 되어버린다.

answer를 초기화 할 떼 단순 " "로 바꿔

answer += "김서방은 "+i+"에 있다." (x)
answer = "김서방은 "+i+"에 있다." (o)

로 해서 넣어주면 될 것 같다.

수정 코드

import java.util.ArrayList;

class Solution {
    public String solution(String[] seoul) {
            String answer = "";
        String lname = "Kim";
        
        ArrayList<String> list = new ArrayList<String>();
        
        for(String s : seoul) {
        	list.add(s);
        }        
        
        for(int i=0; i<seoul.length; i++) {
        	if(lname.equals(list.get(i).toString())) {
        		answer = "김서방은 "+i+"에 있다";
        	}
        }
        return answer;
	}
}

좋은 웹페이지 즐겨찾기