<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[프로그래머스] LEVEL 1 : 가운데 글자 가져오기(C++)

BlockDMask 2018. 8. 4. 11:30
반응형

  • 안녕하세요! BlockDMask 입니다.

  • 프로그래머스 알고리즘 문제 LEVEL 1 난이도

  • "가운데 글자 가져오기"를 풀어보았습니다.

  • 사용언어 : C++

0. 제목
  • 프로그래머스 알고리즘 : 가운데 글자 가져오기

1. 문제 설명

  • 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.

  • 단어의 길이가 짝수라면 가운데 두 글자를 반환하면 됩니다.

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

  • 입출력 예시.
    입력 -> 출력
    "abcde" -> "c"
    "qwer" -> "we"

2. 풀이 과정

  • 이 문제를 보고 간단하게만 생각하면.
    문자열 s 를 받고 그것의 길이(length), 크기(size)가 홀수인지 짝수인지 구분해서
    반환하는 문자열로 만들어 주면 됩니다.

  • 그러면 우리는 std::string 클래스를 사용하게 되는데 문자열의 position에 접근할 수 있는 무기는
    문자열의 position a부터 인덱스를 뽑아주는 함수 - std::string 의 substr 를 생각할수 있고
    단순 인덱스를 접근해서 문자를 반환하는 것이라면 - std::string 의 at 함수나 operator[] 를 생각할 수 있습니다.

  • substr은 문자열을 어디서부터 어디까지 잘라서 문자열을 복사, 반환하는 것이고
    단순 인덱스 접근은 바로 해당위치에 접근하는 차이가 있습니다.
    저는 문자열 인덱스에 바로 접근하도록 operator[]를 사용하였습니다.

  • 우리는 main을 볼수 없고, string solution(string s)만 볼 수 있기 때문에 
    다른 부분이 어떻게 구현되어있는지 모릅니다.그렇기 때문에 solution 함수가 어떤식으로 불리는지 알 수 없습니다.

  • 저는 solution이 최악의 경우 메인 내부에서
    solution("dok2mmnqkv");
    solution("a");
    solution("abcdefghijklmnop");
    solution("blockdmask");
    ...
    .
    .
    .
    solution("programmersprogrammersprogrammers");

  • 이런식으로 계속 함수가 호출 될 수도 있다고 판단하였습니다.
    그렇기 때문에 매직넘버 2를 static 선언을 수행하였고
    내부에서 변경하지 않도록 const 선언을 해주었습니다.

  • s.length() 함수도 여러번 사용될 수 있기 때문에 따로 const 변수로 선언해서 한번의 변수를 여러번 사용하도록 수행했습니다.


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <vector>
using namespace std;
 
string solution(string s) {
    string answer = "";
    static const size_t TWO = 2;
    const size_t length = s.length();
    
    if(length % TWO == 0)
    {
        //짝수
        answer += s[length / 2 - 1];
        answer += s[length / 2];
    }
    else
    {
        //홀수
        answer += s[length / 2];
    }
    return answer;
}
cs


4. 채점



감사합니다.

반응형