12903번 문제
코딩테스트 연습 - 가운데 글자 가져오기 | 프로그래머스 (programmers.co.kr)
풀이
✔ 단어 's'의 길이는 1 이상
✔ 홀수는 가운데 1글자, 짝수는 가운데 2글자
- 풀이1
public String solution(String s) {
int len = s.length();
return s.substring((len-1) / 2, (len/2) + 1);
}
✔ String.substring(int beginIndex, int endIndex)
: begin 부터 end-1 사이의 모든 문자를 반환합니다.
즉, "abcd" 의 중앙값인 "bc"를 가져오기 위해서는 s.substring(1, 3) 을 구해야 합니다.
begin의 위치만 봤을 때
"abcde" 일 때는 len=5, beginIndex= 2
"abcd" 일 때는 len=4, beginIndex= 1
일반적으로 중앙을 구하는 것처럼 나누기 2를 한다고 봤을 때
"abcde"는 나누어서 2를 가져오는 방법은 5/2, (5-1)/2 가 있다.
"abcd"는 나누어서 1를 가져오는 방법은 (4-1)/2, (4-2)/2 가 있다.
그러므로 "abcde" 와 "abcd" 모두를 만족시키는 식은 (len-1) / 2 이다.
"abcde" > (5-1) / 2 = 2(beginIndex)
"abcd" > (4-1) / 2 = 1(beginIndex)
end의 위치만 봤을 때
"abcde" 일 때는 len=5, endIndex=3
"abcd" 일 때는 len=4, endIndex=3
일반적으로 중앙을 구하는 것처럼 나누기 2를 한다고 봤을 때
"abcde"는 나누어서 3를 가져오는 방법은 (5/2)+1, ((5-1)/2)+1 가 있다.
"abcd"는 나누어서 3를 가져오는 방법은 (4/2)+1 가 있다.
그러므로 "abcde"와 "abcd" 모두를 만족시키는 식은 (len/2) + 1 이다.
"abcde" > (5/2) + 1 = 3
"abcd" > (4/2) + 1 = 3
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 최소직사각형 java :: 위클리 챌린지 :: 86491 (0) | 2022.06.22 |
---|---|
프로그래머스 - 부족한 금액 계산하기 java :: 위클리 챌린지 (0) | 2022.06.21 |
프로그래머스 - 헤비 유저가 소유한 장소 MySQL/Oracle (0) | 2022.06.17 |
프로그래머스 - 같은 숫자는 싫어 java (0) | 2022.06.16 |
프로그래머스 - 두 정수 사이의 합 java (0) | 2022.06.14 |