Algorithm/프로그래머스

[프로그래머스] Level1) 가운데 글자 가져오기

햄습햄 2021. 11. 4. 01:10

문제 설명

 

단어 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형 변수를 만들 필요 없이 조금 더 생각한다면 처리할 수 있었다. 그래서 더욱 아쉬움이 많이 남았다.