[연습문제] 가운데 글자 가져오기
2024. 10. 28. 18:00ㆍ입문문제
https://school.programmers.co.kr/learn/courses/30/lessons/12903
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
재한사항
- s는 길이가 1 이상, 100이하인 스트링입니다.
입출력 예
| s | return |
| "abcde" | "c" |
| "qwer" | "we" |
주어진 단어 s의 가운데 글자를 반환하는데, s의 길이가 홀수라면 가운데 글자 하나를, 짝수라면 가운데 글자 둘을 반환해야 합니다.
단어 s의 길이를 k이라고 생각해본다면, 홀수 짝수의 경우는 다음과 같습니다.
- k = 2n + 1 (홀수일 때), return 값은 n번째 단어
- k = 2n (짝수일 때), return 값은 n - 1, n번째 단어
조건문을 사용해 홀수/짝수일 때를 나누어 구할 수도 있지만, 단어의 시작 l과 끝 r을 구하는 방법으로도 문제를 풀 수 있습니다.
l은 (k - 1)를 2로 나눈 몫, r은 k를 2로 나눈 몫 + 1로 설정한다면 홀수 짝수와는 상관없이 가운데 글자를 구할 수 있습니다.
정답 코드를 작성해보겠습니다.
1. C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s) {
char* answer = (char*)malloc(3);
int idx = 0;
int l = (strlen(s) - 1) / 2;
int r = (strlen(s) / 2) + 1;
for (int i = l; i < r; i++) {
answer[idx++] = *(s + i);
}
answer[idx] = '\0';
return answer;
}
2. 파이썬
def solution(s):
l, r = (len(s) - 1) // 2, len(s) // 2 + 1
answer = s[l:r]
return answer
간단하게 조건문을 사용하시는 편이 낫습니다.
'입문문제' 카테고리의 다른 글
| [연습문제] 문자열 내 p와 y의 개수 (0) | 2024.11.01 |
|---|---|
| [연습문제] 문자열 내 마음대로 정렬하기 (0) | 2024.10.31 |
| [연습문제] 두 정수 사이의 합 (0) | 2024.10.30 |
| [연습문제] 나누어 떨어지는 숫자 배열 (0) | 2024.10.29 |
| [연습문제] 2016년 (0) | 2024.10.27 |