소년코딩

가운데 글자 가져오기

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

재한사항
  • s는 길이가 1 이상, 100이하인 스트링입니다

단어의 길이가 짝수인지 홀수인지 판별한 후 가운데 글자를 반환하면 된다.

짝수 홀수 판별 알고리즘

정수가 짝수인지 홀수인지 판별하는 법은 쉽다. 2로 나눠서 나머지가 0이면 짝수고, 아니면 홀수다.

// 1. 조건문
if (number % 2 == 0) // 짝수
{

}
else                 // 홀수
{

}

// 2. 함수
bool IsEvenNumber(int number)
{
    return number % 2 == 0; // 2로 나누어 떨어지면 짝수다.
}

비트 연산으로 판별하는 방법도 있다. 홀수일 경우 이진법에서 제일 마지막 수는 1이다. 비트 AND 연산자(&)를 이용해서 알 수 있다. 비트 연산에 대한 더 자세한 내용을 알고 싶다면 아래 포스트들을 참고하면 된다.

2018/06/27 - C++ 03.07 - 비트 단위 연산자 (Bitwise operators)

2018/06/27 - C++ 03.08 - 비트 플래그와 비트 마스크 (Bit flags and bit masks)

bool IsEvenNumber(int number)
{
    // 1 & 1: 0001 & 0001 = 1
    // 2 & 1: 0010 & 0001 = 0
    // 3 & 1: 0011 & 0001 = 1
    // 4 & 1: 0100 & 0001 = 0
    return number & 1 == 0;
}

문자열 자르기

C++의 string에는 문자열 일부를 반환하는 substr 메서드가 있다.

string substr (size_t pos = 0, size_t len = npos) const;

문자열의 pos부터 len 길이 만큼의 문자열을 반환한다. 만약 len의 값이 문자열의 길이보다 길거나, string::npos를 전달하면 문자열의 끝까지만 반환한다. 이 메서드를 이용해서 '가운데 글자 가져오기' 문제를 해결해보자.

#include <string>
#include <vector>

using namespace std;

string solution(string s)
{
    int length = s.length();

    if (length & 1 == 1) // 홀수
    {
        return s.substr(length / 2, 1);
    }
    else 
    {
        return s.substr(length / 2 - 1, 2);
    }
}

text

2018/12/19 - [프로그래머스] 소수의 합, 소수 판별 알고리즘

2018/12/21 - [프로그래머스] 완주하지 못한 선수, map과 unordered_map의 차이

2018/12/23 - [프로그래머스] N으로 표현

2018/12/23 - [프로그래머스] 모의고사

2018/12/23 - [프로그래머스] K번째수, vector.assign()

2018/12/25 - [프로그래머스] 체육복, 벡터 삭제 시 주의점 (iterator, erase)

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기