안녕하세요! BlockDMask 입니다.
프로그래머스 알고리즘 문제 LEVEL 1 난이도
"가운데 글자 가져오기"를 풀어보았습니다.
사용언어 : C++
프로그래머스 알고리즘 : 가운데 글자 가져오기
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. 채점
감사합니다.
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[프로그래머스] LEVEL 1 : 자릿수 더하기 (C++) (0) | 2018.09.17 |
---|---|
[프로그래머스] LEVEL 1 : 자연수 뒤집어 배열로 만들기 (C++) (0) | 2018.08.17 |
[프로그래머스] LEVEL 1 : 문자열 다루기 기본(C++) (0) | 2018.08.15 |
[프로그래머스] LEVEL 1 : 나누어 떨어지는 숫자 배열(C++) (4) | 2018.08.05 |
[Level 2] 콜라즈 추측 (0) | 2017.12.26 |
[Level 1] 피보나치 수 (반복문) (3) | 2017.12.15 |
[Level 1] 최대공약수와 최소공배수 (0) | 2017.12.14 |
[백준 1463] 1로 만들기 (BFS) (0) | 2017.12.13 |