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

[프로그래머스/알고리즘] 가운데 글자 가져오기 (자바/Java)

by 전재경 2022. 11. 18.

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.

단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

 

재한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

 

Step1. 문제분석

 

문제는 이해를 했다.

abcde 홀수

qwer 짝수

 

그중 홀수는 가운데 글자만, 짝수는 그 가운데에 2글자를

index가 0,1,2,3 이런식이면 1,2를

0,1,2,3,4,5,6,7 이런식이면 3,4를 가져오면 되는 것이였다.

이는 /2를 하고 거기서 -1을 하고 해서 2개를 가져오면 된다고 생각했다.

 

그래서 우선 홀수와 짝수를 구분짓기 위해

 if (s.length() % 2 == 0){
 짝수
 }else{
 홀수
 }

이런식으로 나누었다.

 

그 후 짝수에서 나와야 하는 값

answer += s.charAt(s.length() / 2 - 1);
answer += s.charAt(s.length() / 2);	//짝수에서의 값

answer += s.charAt(s.length() / 2);	//홀수에서의 값

이렇게 값들을 넣어주었다.

charAt의 경우 문자열을 한 글자씩 쪼개 char타입으로 변환해주는 기능이다.

toCharArray() 메소드에 비해 처리속도가 내부적으로 빨라 문자열을 나눌 때 charAt() 메소드를 주로 사용한다.

 

Step2. 문제풀이 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        
        if (s.length() % 2 == 0) {    //짝수일 경우
            answer += s.charAt(s.length() / 2 - 1);
            answer += s.charAt(s.length() / 2);
        } else {
            answer += s.charAt(s.length() / 2);  //홀수일경우
        }
        return answer;
    }
}

 

이렇게 해결은 했지만 하나의 문제가 생겼었다.

 

내가 처음 생각한 코드가

 

public class Main {
    public static void main(String[] args) {
        String s = "";
        String answer = "";

        if (s.length() % 2 == 0) {    //짝수일 경우
            answer += s.charAt(s.length() / 2 - 1);
            answer += s.charAt(s.length() / 2);
        } else {
            answer += s.charAt(s.length() / 2 );  //홀수일경우
        }
        System.out.printf(answer);
    }
}

 

이러한 코드였는데 어차피 똑같으니 문제는 없다고 생각했다.

 

근데 안되는 점들이 많았다.

 

 

Step3. 다른 사람의 풀이 코드

class StringExercise{
    String getMiddle(String word){

        return word.substring((word.length()-1) / 2, word.length()/2 + 1);    
    }
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void  main(String[] args){
        StringExercise se = new StringExercise();
        System.out.println(se.getMiddle("power"));
    }
}

테스트를 위한 코드까지 없다면

class StringExercise{
    String getMiddle(String word){

        return word.substring((word.length()-1) / 2, word.length()/2 + 1);    
    }

너무나 간단하게 풀리는 문제였다,,,

 

근데 substring에 대해서도 잘 이해를 하지 못하고

저 계산식에서도 조금 더 생각해 볼 필요가 있겠다.

 

세상에 똑똑한 사람은 너무도 많다,,,

 

너무 배운대로 그대로 써먹는 거 보다는 더 좋은 방식이 있는지 생각하는 습관을 들여야겠다.

댓글