일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SQL
- 수학
- C
- 프로그래머스연습문제
- 이분탐색
- 그리디
- 이진탐색
- 다이나믹프로그래밍
- 문자열
- C++
- 프로그래머스sql
- 소수판정
- 해시를사용한집합과맵
- C언어
- 백준
- MySQL
- 사칙연산
- 프로그래머스
- 구현
- 백준알고리즘
- 정수론
- 그리디알고리즘
- 큐
- 프로그래머스코딩테스트
- 브루트포스알고리즘
- 논문구현
- 논문리뷰
- 정렬
- 자료구조
- Image Classification
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 프로그래머스 가운데 글자 가져오기 본문
1. 문제이해
코딩테스트 연습 - 가운데 글자 가져오기 | 프로그래머스 (programmers.co.kr)
문자열 s의 가운데 글자를 반환하는 알고리즘을 구현하는 것이 목표이다.
문자열 s의 길이가 홀수라면 가운데 글자 하나,
짝수라면 가운데 글자 2개를 반환해야 한다.
2. 문제풀이
문자열 s의 가운데 글자를 반환하는 문제이다.
단, 길이가 홀수의 경우에는 가운데 글자 하나만을 출력하되, 짝수의 경우에는 가운데 글자 두개를 반환해야한다.
예를 들어, abc의 경우에는 b,
abcd의 경우에는 bc를 반환하면 된다.
문자열 s의 길이가 홀수이냐 짝수이냐에 따라 경우가 틀려지므로,
if문을 통해 경우를 나누어야겠다고 생각했다.
또한, abc가 주어진 경우, 각각 a가 s[0], b가 s[1], c가 s[2]에 해당하므로,
전체 s의 길이인 3을 2로 나눈 값, 3 / 2 = 1번째에 해당하는 값(s[1] = b)을 반환해주면
그 값이 해당 문자열의 가운데 값이 나왔다.
짝수인 abcd가 주어진 경우에는 4 / 2 = 2번째에 해당하는 값과 그 전 값을 더해주면 됐다.
(s[2] = c, s[1] = b)
문제의 주어진 틀은 다음과 같았다.
3. 소스코드
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = "";
int size = s.size();
int index = size / 2;
if(size % 2 == 1){ // 길이가 홀수인 경우
answer = s[index];
}
else { // 길이가 짝수인 경우
answer = s[index - 1];
answer += s[index];
}
return answer;
}
s의 길이를 체크하고 (size), s의 길이가 홀수이냐 짝수이냐에 따라 경우를 다르게 해주었다.
길이가 홀수인 경우에는 배열에 size / 2 한 값에 해당하는 값을 반환하고,
짝수인 경우에는 그 전의 값까지 이어서 반환해주었다.
처음에 홀수인지 짝수인지를 구별할때 나머지연산자(%)를 썼어야 하는데,
/ 를 써서 뭐가 틀렸는지 한참 들여다봤다..ㅎㅎ
이런 실수는 안하도록 해야지🤣
'코딩테스트 > 📘 프로그래머스 (programmers)' 카테고리의 다른 글
[C] 프로그래머스 직사각형 별찍기 (0) | 2021.09.11 |
---|---|
[C++] 프로그래머스 핸드폰 번호 가리기 (0) | 2021.09.11 |
[C++] 프로그래머스 수박수박수박수박수박수? (0) | 2021.08.21 |
[C++] 프로그래머스 문자열을 정수로 바꾸기 (0) | 2021.08.17 |
[C++] 프로그래머스 2016년 (0) | 2021.08.16 |