본문 바로가기

숨막히는 알고말고/문제 풀이

[Programmers] 가운데 글자 가져오기

👀 문제 설명

문제

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

  • s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예

s return
"abcde" "c"
"qwer" "we"

✍🏻풀이

string의 size를 이용해서 단어의 길이가 홀수이면 중간값 하나만 가져오고, 짝수이면 (s.size() - 1) / 2의 위치에 있는 값과 그 오른쪽에 있는 값을 가져오도록 했다.

 

다른 풀이는 훨씬 간단하다.

string의 length를 이용하여 length가 2로 나누어 떨어지면 단어의 길이가 짝수라는 뜻이고, 아닐 경우 홀수라는 뜻이다.

각각의 경우에서 string의 substr함수를 사용해 특정 부분을 잘라왔다.

짝수일 경우, s.substr(strLength / 2 - 1, 2);를 사용해 가운데 두 값을 가져왔고,

홀수일 경우, s.substr(strLength / 2, 1);를 사용해 가운데 값을 가져왔다.

 

string의 특정 부분을 잘라오는 함수 : substr

 

코드

내 풀이

//
//  Programmers_12903.cpp
//  Algorithm
//
//  Created by 조수민 on 2020/12/01.
//  Copyright © 2020 조수민. All rights reserved.
//
//  가운데 글자 가져오기(https://programmers.co.kr/learn/courses/30/lessons/12903)

#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    
    int lastIndex = s.size() - 1;
    int middleIndex = lastIndex / 2;
    
    if (lastIndex % 2 == 0) { // 단어의 길이가 홀수
        answer = s.at(middleIndex);
    }
    else { // 단어의 길이가 짝수
        answer += s.at(middleIndex);
        answer += s.at(middleIndex + 1);
    }
    
    return answer;
}

int main() {
    cout << solution("abcde") << endl;
    cout << solution("qwer") << endl;
    
    return 0;
}

 

substr 사용한 풀이

//
//  Programmers_12903_another_solution.cpp
//  Algorithm
//
//  Created by 조수민 on 2020/12/01.
//  Copyright © 2020 조수민. All rights reserved.
//
//  가운데 글자 가져오기(https://programmers.co.kr/learn/courses/30/lessons/12903)

#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

string solution(string s) {
    string answer = "";
    
    int strLength = s.length();
    
    if (strLength % 2 == 0) { // 단어의 길이가 짝수
        answer = s.substr(strLength / 2 - 1, 2);
    }
    else {
        answer = s.substr(strLength / 2, 1);
    }
    
    return answer;
}

int main() {
    cout << solution("abcde") << endl;
    cout << solution("qwer") << endl;
    
    return 0;
}

'숨막히는 알고말고 > 문제 풀이' 카테고리의 다른 글

[Programmers] 문자열 압축  (0) 2020.12.17
[Programmers] 124 나라의 숫자  (0) 2020.12.17
[Programmers] 두 개 뽑아서 더하기  (0) 2020.12.01
[Programmers] 구명보트  (0) 2020.11.30
[Baekjoon] 행렬  (0) 2020.11.26