[Java] 알고리즘, "가운데 글자 가져오기"

가운데 글자 가져오기

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.


제한사항

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


입출력      예

s     return

abcde       c

qwer       we


문제 풀이

- 짝수와 홀수일 때를 구분할 것.

- 매개변수로 들어온 문자열의 길이를 이용할 것. (문자열.length() 메서드 이용 )


나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
  public String solution(String s) {
      String answer = "";
      if(s.length()%2==0){
          //짝수
          answer = s.charAt((s.length()/2)-1)+""+s.charAt(s.length()/2);
      }else{
          //홀수
          answer = s.charAt(s.length()/2)+"";
      }
      return answer;
  }
}
cs


간단한 알고리즘 입니다. 문자열의 길이를 이용해서( s.length()를 변수로 선언하면 더 깔끔한 코딩이 될 것 같습니다. ) charAt() 메서드를 이용하여 가운데 문자 하나를 얻어옵니다. 하지만 charAt 메서드는 char형을 반환하므로 String 변수에 대입할 수 없습니다. 따라서 빈문자열을 붙여줌으로써 String 변수에 대입할 수 있도록 했습니다.


다른사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
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"));
    }
}
cs

이분은 substring 함수를 이용해서 푸셨네요. 

substring() 메서드는 -> substring(문자열, 시작 index, 종료index) 와 같이 시작인덱스와 종료인덱스를 지정해서 문자열을 자를 수 있습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
class StringExercise{
    String getMiddle(String word){
        int length = word.length();
        int mid = length / 2;
        return length%2==0 ? word.substring(mid-1, mid+1) : word.substring(mid, mid+1) ;  
    }
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void  main(String[] args){
        StringExercise se = new StringExercise();
        System.out.println(se.getMiddle("power"));
    }
}
cs

이분도 substring 함수를 이용해서 문제를 해결하신분이십니다.


개인적인 입장에서 위의 두 풀이와 저의 풀이중 제께 좀 길어보이고, 알고리즘 측면에서 많이 부족해 보이는 것이 사실입니다. 하지만 프로그래머로서 "일" 을 하다보면 느끼실테지만, 개인적인 생각으로는 자기혼자 코딩하는 분들은 진짜 천재적이신분들 아니시면 "가독성"이 제일 중요하다고 생각합니다. 모든 사람이 천재적일 수는 없으니, 누군가가 썼던 코드를 제가 써야할 경우도 분명히 존재하기 때문입니다. 알고리즘이 일적으로 코딩하는 것과는 관련이 없을 수도 있지만, 개인적으로 저는 true ? A : B 형식(물론 return문 안에서는 자주 씁니다^^)의 코드스타일보다는 if문을 통한 분기가 가독성이 있다고 생각해서 간단한 분기조차 if/else문으로 처리하려고 하는 편입니다.^^


length vs length() ???

또한, 초보자분들은 헷갈리실 경우가 많을 것입니다. 이클립스는 인텔리전스가 굉장히 발달해서 이클립스를 이용할 경우는 생각하지 않으셔도 됩니다만. 손코딩 같은 경우를 맞딱들이실 경우에 문자열에 length(숫자)를 쓰느냐, length()(문자열)를 쓰느냐는 정말 헷갈리게 합니다.. (저는 기본기가 부족해서...). 그러기에 제 개인적인 의견은 너무 인텔리전스만 믿지 마시고 비슷한 메서드(은근 많습니다...ㅠ)는 딱딱 구분해서 알아두시는 것이 좋을 것 같다는 의견입니다.







댓글

Designed by JB FACTORY