[프로그래머스] Level1) 가운데 글자 가져오기
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한 조건
- s는 길이가 1 이상, 100이하인 스트링입니다.
풀이 과정 (자바)
입력받은 s의 길이가 짝수일 때는 1, 홀수일 때는 0 값을 가지는 int형 i를 초기화했다.
그리고 s를 substring 했다.
s.length를 절반으로 나눈 값에 대해
i를 뺀 위치부터 1 더한 위치 전까지를 구해 반환했다.
s.length() / 2 - i, s.length() / 2 + 1을 한 이유?
가운데 값을 반환해야 하므로,
우선, 입력받은 s를 절반으로 나눴다.
(s.length() / 2 => A라고 지정한다.)
홀수) abcde
길이가 5이고, c를 반환해야 한다.
A: 5 / 2를 하면 2가 나오는데 substring할 때,
abcde
01234
c를 출력하기 위해 시작 위치를 2로 해야 한다.
i에 0을 넣어 A - i는 2가 된다.
또한 c만 출력해야 하므로,
c부터 d 전까지 => 2부터 3전까지라고 처리해야 한다.
그러므로, 현재 A (= 2) + 1을 하면 3이 나온다.
짝수) qwer
길이가 4이고, we를 반환해야 한다.
A: 4 / 2를 하면 2가 나오는데 substring할 때,
qwer
0123
we를 출력하기 위해 시작 위치를 1로 해야 한다.
i에 1을 넣어 A - i는 1이 된다.
또한 we를 출력해야 하므로,
w부터 r 전까지 => 1부터 3전까지라고 처리해야 한다.
그러므로, 현재 A (= 2) + 1을 하면 3이 나온다.
결과
다른 사람의 풀이
입력받은 s를 substring 했다.
s.length에서 1을 뺀 값을 절반으로 나눈 값부터
s.length를 절반으로 나눈 후 1을 더한 값 전까지를 구해 반환했다.
(s.length()-1) / 2를 한 이유?
홀수) abcde
길이가 5이고, c를 반환해야 한다.
시작 위치가 2여야 한다.
5 - 1을 하면 4
4 / 2를 하면 2가 나온다.
짝수) qwer
길이가 4이고, we를 반환해야 한다.
시작 위치가 3이어야 한다.
4 - 1을 하면 3
3 / 2를 하면 1이 나온다.
기타
굳이 int형 변수를 만들 필요 없이 조금 더 생각한다면 처리할 수 있었다. 그래서 더욱 아쉬움이 많이 남았다.