본문 바로가기

About/Algorithm

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

출처 프로그래머스 

https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문자열의 가운데 문자를 반환하면 되는 문제이다.

길이가 짝수인 경우 문자 가운데 두 글자를 반환하는 것이 포인트이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <string>
#include <vector>
 
using namespace std;
 
string solution(string s) {
    string answer = "";
    bool isOdd = s.size() % 2;
    int index = int(s.length() / 2);
    if (isOdd) 
        answer = s.at(index);
    else {
        answer = s.at(index - 1);
        answer += s.at(index);
    }
 
    return answer;
}

6번줄의  bool isOdd = s.size() % 2;

문자열의 길이를 mod 2 연산을 하여 문자의 개수가 홀수인지 짝수인지 확인하였다.

 

그 후

 

홀수인 경우 문자열의 중간 문자를 반환하였고

짝수인 경우 중간의 두 문자를 스트링에 추가하여 반환하였다.

 

 

 

다 풀고 나서 코드를 좀 더 간단하게 할 수 있을 것 같아서 수정해보았다.

1
2
3
4
5
6
7
8
9
10
#include <string>
#include <vector>
 
using namespace std;
 
string solut123ion(string s) {
    bool isOdd = s.size() % 2;
    int index = s.length() / 2;
    return isOdd ? s.substr(index,1) : s.substr(index - 12);
}
 

STL string의 substr()를 이용해서

문자 개수가 홀수 인경우 중간의 1개를 반환시키고

 

문자 개수가 짝수인 경우 중간의 문자 2개를 반환시켰다.