article thumbnail image
Published 2022. 5. 30. 19:44
가운데 문자 출력
소문자로 된 단어(문자열)가 입력되면 그 단어의 가운데 문자를 출력하는 프로그램을 작성하세
요. 단 단어의 길이가 짝수일 경우 가운데 2개의 문자를 출력합니다.
▣ 입력설명
첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.
▣ 출력설명
첫 줄에 가운데 문자를 출력합니다.
▣ 입력예제 1
study
▣ 출력예제 1
u
▣ 입력예제 2
good
▣ 출력예제 2
oo
📌작성코드
문자열의 길이가 홀수라면 가운데 문제만 출력해주고,
짝수라면 가운데문제열 두개를 동시에 출력해주면 된다.
차근차근 적어보자.
<html>

<head>
  <meta charset="UTF-8">
  <title>출력결과</title>
</head>

<body>
  <script>
    function solution(s) {
      let answer;

      if (s.length % 2 === 1) { //홀수일 때
        answer = s[Math.floor(s.length / 2) 
        ]
      } else { //짝수일 때
        answer = s[Math.floor(s.length / 2) - 1]
        answer = answer + s[Math.floor(s.length / 2)  
        ]
      }
      return answer;
    }
    console.log(solution("good"));
  </script>
</body>

</html>

문자열의 길이가 홀수일때부터 살펴보자.

'study'라는 다섯글자인 문자열이 있다.

5를 2로 나누면 2.5라는 값이 나온다. 

문자열 5를 인덱스로 따져봤을때 0번째 1번째 2번째 3번째 4번째 라는 값 이 있고,

2번째가 됐을때 우리는 가운데 인덱스를 알 수 있다.

(길이가 7이여도 똑같다. ( 7/ 2 )로 나누면 3.5고 결국엔 가운데 인덱스는 3번째 라는것을 알 수 있다.)

우리가 원하는 글자는 'u'라는 문자를 출력하는것이다.

study에서 u는 제로베이스로 따졌을때, 0=s, 1=t, 2=u 이다.

자연수의 뒤를  Math.floor를 사용해 없애주면 된다.

2라는 값을 얻을 수 있고,

이 값을 s라는 문자열의 '인덱스'로 넣어주고 => s[Math.floor(s.length / 2)]

if조건문으로 홀수 조건을 넣어주면 'u'가 잘 출력된다.

(문자열의 길이를 2로 나눴을때 나머지가 1이라는건 === 홀수)

 

문자열의 길이가 짝수일땐?

문자열이 짝수일때는 -1을 해준다.

main이라는 문자열이 들어온다고 했을때, s.length를 콘솔에 찍어보면 숫자 4가 출력된다.

나누기 2를 하면 숫자 2고 main을 제로베이스부터 세어보면 0,1,2 즉 i 가 출력된다.

우리가 원하는 스트링은 ai이기때문에 -1을 해준 것이다.

그 다음 스트링은 i를 출력하기위해 answer에 한번 더 코드를 넣어주면 된다.

 

 

번외 )🙋🏻여기서 이 코드를 

  answer = s[Math.floor(s.length / 2)
          - 1]
  answer = answer + s[Math.floor(s.length / 2)
        ]

이렇게 👇

    answer = answer + s[Math.floor(s.length / 2)
        ]
    answer = s[Math.floor(s.length / 2)
          - 1]

 

 

해당 코드의 위치를 바꾸며 어떻게 될까?

우리가 원했던 '문자 good' 에서 oo 이 나오지 않고 o 이 하나만 나온다.

 

당연하게도

answer + s[Math.floor(s.length /2)] 에는 값이 잘 저장 되어있지만

그다음 answer 에서 결과 값을 저장해주지 않았기때문에

s[Math.floor(s.length / 2) -1 ] 의 값인 "문자o" 만 

출력되는 것이다. "문자oo"를 출력하고 싶으면 

코드의 위치를 변경해서 

앞의 코드를 먼저 저장하고, answer에 그 값을 담아 

다음코드와 + 면 우리가 원하는 "oo 문자" 를 얻을 수 있다.

 

    answer = answer + s[Math.floor(s.length / 2)
        ]
    answer = answer + s[Math.floor(s.length / 2)
          - 1]

 

이렇게 넣어준다면? 

앞선 answer는 값이 없기때문에 undefinedoo 이라는 문자가 뜬다.

'알고리즘' 카테고리의 다른 글

[알고리즘 문제] 17번  (0) 2022.05.31
[알고리즘 문제] 16번  (0) 2022.05.31
[알고리즘 문제] 14번  (0) 2022.05.30
[알고리즘 문제] 13번  (0) 2022.05.30
[알고리즘 문제] 12번  (0) 2022.05.30
복사했습니다!