Hayden's Archive
[알고리즘] 프로그래머스 : 가운데 글자 가져오기 본문
알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12903
내가 작성한 코드
일단 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);
}
}