[TIL #17] 가운데 글자 가져오기

2024. 7. 11. 17:12·Camp/T.I.L.

임의의 문자열 $S$가 있을 때, 문자열의 가운데에 있는 글자를 반환해야 한다.

문자열의 길이가 짝수일 경우 중간의 2글자를 반환한다.

 

난 1차로 아래와 같이 답을 냈다.

#include <string>
#include <locale>
#include <codecvt>

using namespace std;

string wstringToString(const std::wstring& wstr) {
    wstring_convert<codecvt_utf8<wchar_t>, wchar_t> converter;
    return converter.to_bytes(wstr);
}

string solution(int n) {
    wstring base = L"수박";
    wstring answer;
    
    for (int i = 0; i < n; ++i)
        answer += base[i % 2];
    
    return wstringToString(answer);
}

흠...

유니코드 장난질 때문에 이렇게 까지 해야 한다고?

라는 생각이 머리에 가득 찼다.

이걸 의도하진 않았을 터. 다른 방법을 생각해 보기로 했다.

 

그러다 떠오른 것이 ``string``의 특성.

``string``은 일반적으로 1바이트를 가진다.

2바이트 이상을 가지는 멀티바이트 문자를 여러 개의 ``char``를 통해 처리할 수 있지만,

이걸로 다 처리하기엔 적절하지 못하다.

``string``은 ``char``의 배열이기 때문에 인덱스로 접근하면 당연히 제대로 된 값을 불러오지 못한다.

하지만 그렇다고 해서 ``wstring``을 꼭 써야만 하는 것은 아니다.

따라서 base 스트링을 선언해 사용하는 것이 아니라 문자 자체를 임의로 삽입하는 것이다.

 

string solution(int n) {
    string answer;
    
    for (int i = 0; i < n; ++i)
        answer += (i & 1) ? "박" : "수";
    
    return answer;
}

홀짝 구분을 하고 바로 "수"와 "박"을 ``answer``에 삽입한다.

이러면 ``string``을 인덱스로 접근할 때 발생하는 문제를 신경 쓰지 않아도 되고 코드가 매우 간결해진다.

 

하 참... 이 단순한걸 왜 이리 어렵게 빙빙 돌아갔을까.

'Camp > T.I.L.' 카테고리의 다른 글

[TIL #19] 사각형 별 찍기  (0) 2024.07.17
[TIL #18] 약수의 개수와 덧셈  (0) 2024.07.12
[TIL #16] 없는 숫자 더하기  (0) 2024.07.10
[TIL #15] 콜라츠 추측  (0) 2024.07.09
[TIL #14] 정수 내림차순으로 배치하기  (0) 2024.07.04
'Camp/T.I.L.' 카테고리의 다른 글
  • [TIL #19] 사각형 별 찍기
  • [TIL #18] 약수의 개수와 덧셈
  • [TIL #16] 없는 숫자 더하기
  • [TIL #15] 콜라츠 추측
BVM
BVM
  • BVM
    E:\
    BVM
  • 전체
    오늘
    어제
    • 분류 전체보기 (168)
      • Thoughts (14)
      • Study (69)
        • Japanese (3)
        • C++ & C# (46)
        • Javascript (3)
        • Python (14)
        • Others (3)
      • Play (1)
        • Battlefield (1)
      • Others (11)
      • Camp (73)
        • T.I.L. (57)
        • Temp (1)
        • Standard (10)
        • Challenge (3)
        • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 본 블로그 개설의 목적
  • 인기 글

  • 태그

    Python
    C++
    프로그래머스
    7계층
    c#
    베데스다
    네트워크 프로그래밍
    IOCP
    docker
    bot
    Dalamud
    클라우드
    cloudtype
    Selenium
    로깅
    discord py
    OSI
    discord
    네트워크
    서버
    boost
    스타필드
    FF14
    db
    Server
    JS
    Network
    암호화
    포인터
    Asio
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
BVM
[TIL #17] 가운데 글자 가져오기
상단으로

티스토리툴바