가운데 글자 가져오기

김여울·2025년 6월 20일

내일배움캠프

목록 보기
27/139
#include <string>  // 문자열을 사용할 수 있도록 헤더 파일 포함
#include <iostream> // 입력과 출력을 사용하기 위한 헤더 파일
using namespace std;  // std 네임스페이스 사용

string solution(string s) {  // solution 함수 정의, 매개변수는 문자열 s
    int len = s.length();  // s의 길이를 len 변수에 저장

    if (len % 2 == 0) {  // 만약 s의 길이가 짝수라면
        return s.substr(len / 2 - 1, 2);  // 가운데 두 글자를 반환
    } else {  // 만약 s의 길이가 홀수라면
        return s.substr(len / 2, 1);  // 가운데 한 글자를 반환
    }
}

int main() {  // 메인 함수 시작
    string s = "abcd";  // 예시 문자열 "abcd"
    cout << solution(s) << endl;  // "bc" 출력

    s = "abc";  // 예시 문자열 "abc"
    cout << solution(s) << endl;  // "b" 출력

    return 0;  // 프로그램 종료
}

✅ s.substr(len / 2 - 1, 2)

  • len / 2

    • 문자열의 길이를 반으로 나누는 부분
    • 문자열 길이가 4라면 len / 2는 2가 됨
  • len / 2 - 1

    • 반으로 나눈 값에서 1을 빼는 부분
    • 문자열 길이가 4일 때, len / 2는 2가 되고, 거기서 1을 빼면 1이 됨
  • substr 함수

    • 주어진 인덱스부터 시작해서 지정한 길이만큼 부분 문자열을 잘라옴
    • 그래서 여기서 len / 2 - 1을 하면 중앙에서 한 칸 왼쪽이 시작 위치가 됨
  • 2

    • substr의 두 번째 매개변수는 "몇 글자를 가져올 것인지"를 뜻함
    • 2는 "두 글자를 잘라서 반환하겠다"

🧩 예시) 길이가 6인 문자열 s = "abcedf"

  • len / 2 → (6 / 2)

    • 문자열의 길이는 6
    • len / 2는 문자열 길이를 반으로 나누는 계산
      • 6 / 2 = 3
      • len / 2는 3이 됨
  • len / 2 - 1 → (3 - 1):

    • len / 2에서 1을 빼는 부분
    • 3 - 1 = 2
    • len / 2 - 1은 2가 됨

    "가운데 두 글자 중 첫 번째 글자의 인덱스"를 찾음
    중앙에서 한 칸 왼쪽으로 가서, 두 번째 글자의 인덱스를 찾음

  • s.substr(len / 2 - 1, 2) 의 전체 동작

    • s.substr(2, 2)는 s 문자열에서 인덱스 2부터 2개의 글자를 자르겠다는 의미
    • s = "abcdef"에서 s.substr(2, 2)는 "cd"를 반환
  • 전체 설명

    • len / 2는 문자열의 중간을 찾는 것
    • len / 2 - 1은 그 중간에서 한 칸 왼쪽으로 이동한 위치를 찾는 것
    • s.substr(len / 2 - 1, 2)는 그 위치부터 두 글자를 잘라낸다는 의미
    • 따라서, 길이가 6인 문자열에서 "cd"가 반환됨

0개의 댓글