Hayden's Archive

[알고리즘] 프로그래머스 : 가운데 글자 가져오기 본문

Algorithm

[알고리즘] 프로그래머스 : 가운데 글자 가져오기

_hayden 2020. 5. 13. 20:50

알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12903

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


내가 작성한 코드

일단 String 타입 s의 길이를 구하여 길이의 반을 버림하고 리턴 타입이 double이므로 그 값을 int형으로 캐스팅한 후 half로 저장했다. 그 뒤 String 클래스의 charAt() 메소드를 사용하여 index 위치에 따른 value를 뽑아내서 char 타입 배열에 저장했고 이를 String 클래스의 생성자 인자값으로 받아서 answer에 저장하고 리턴했다.

그랬더니 정확성 87.5로 나왔고 두 개의 실행에서 에러가 나왔다. 다시 해봤으나 마찬가지였다.

class Solution {
    public String solution(String s) {
        String answer = "";
        int len = s.length();
        int half = (int)Math.floor(len/2);
		char[] ch1 = {s.charAt(half-1)};
        char[] ch2 = {s.charAt(half)};
        if(len == 0) answer = "";
        else if(len == 1) answer = s;
        else if(len % 2 == 1){
            answer = new String(ch2);
        }
        else if(len % 2 == 0) {
            answer = new String(ch1) + new String(ch2);
        }
        return answer;
    }
}

 

그래서 방법을 바꾸어 String 클래스의 substring() 메소드를 사용했다. substring()은 index 시작점과 끝점을 지정하여 String의 원하는 부분을 잘라서 리턴한다. 이 방법을 통해서 문제를 해결했다.

class Solution {
    public String solution(String s) {
        String answer = "";
        int len = s.length();
        int half = (int)Math.floor(len/2);
        if(len == 0) answer = "";
        if(len % 2 == 1){
            answer = s.substring(half, half+1);
        }
        else if(len % 2 == 0){
            answer = s.substring(half-1, half+1);
        }
        return answer;
    }
}

 

다른 사람은 어떻게 풀었는지 궁금해서 코드를 살펴봤는데 기대를 배신하지 않는 코드가 있었다. 역시 간결하다. String이 null값이라서 길이가 0으로 나올 경우가 고려되지 않은 것 같지만 그건 문제에서도 언급이 없었던 부분이기도 함.

결국 자바 라이브러리와 수학을 잘 활용하는 게 관건인 것 같다.

class StringExercise{
    String getMiddle(String word){
        return word.substring((word.length()-1) / 2, word.length()/2 + 1);    
    }
}