문제 설명
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문을 통해 하는 방법도 있었는데 이 방법도 생각하지 못한 법이라 신선했다.
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스/알고리즘] 완주하지 못한 선수(자바/Java) (0) | 2022.11.21 |
---|---|
[프로그래머스/알고리즘] 수박수박수박수 (자바/Java) (0) | 2022.11.21 |
[프로그래머스/알고리즘] 문자열 다루기 기본 (자바/Java) (0) | 2022.11.19 |
[프로그래머스/알고리즘] 문자열 내 p와 y의 개수 (자바/Java) (0) | 2022.11.19 |
[프로그래머스/알고리즘] 내적 (자바/Java) (0) | 2022.11.19 |
댓글