2024. 11. 12. 18:00ㆍ입문문제
https://school.programmers.co.kr/learn/courses/30/lessons/12930
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다.
각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
| s | return |
| "try hello world" | "TrY HeLlO WoRlD" |
입출력 예 설명
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다.
각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다.
따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
1개 이상의 단어들로 이루어진 문자열이 주어질 때, 각 단어들의 짝수번째 인덱스는 대문자로, 홀수번째 인덱스는 소문자로 변경하는 문제입니다.
각 단어별로 적용되기 때문에 "hello world" 같은 경우는 "HeLlO WoRlD"가 되는 거죠.
다만 공백 부분은 항상 그대로 유지해야 됩니다.
C언어를 사용한다면 strtok 함수를 사용해 문자열을 토큰화할 수 있지만, 공백 처리 부분에서 어떻게 될지 몰라서 이 부분은 반복문을 사용해 문제를 풀어보겠습니다.
파이썬은 split 함수를 사용해 토큰화된 문자열들을 처리하는 방법으로 진행해보고요.
정답 코드를 작성해보겠습니다.
1. C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char* solution(const char* s) {
// 문자열의 길이를 가져옵니다.
int len = strlen(s);
// 길이에 맞도록 answer 배열을 선언합니다.
char* answer = (char*)malloc(sizeof(char) * (len + 1));
answer[len] = '\0';
// 인덱스의 위치를 셀 idx
int idx = 0;
// 반복문을 사용합니다.
for (int i=0; i < len; i++) {
// i번째가 공백일 경우
if (s[i] == ' ') {
idx = 0; // 인덱스 초기화
answer[i] = ' '; // 공백 추가
}
else {
if (idx % 2 == 1) { // 홀수번째 인덱스일 경우
answer[i] = tolower(s[i]);
}
else { // 짝수번째 인덱스일 경우
answer[i] = toupper(s[i]);
}
// 인덱스를 1씩 증가시킵니다.
idx++;
}
}
// answer을 반환합니다.
return answer;
}
C언어에서는 toupper, tolower을 사용하지 않고 직접 구현할 수도 있지만, 굳이 그럴 필요는 없다고 생각했습니다.
이 두 함수를 사용하기 위해서는 ctype.h 헤더 파일을 불러와야 합니다.
2. 파이썬
def solution(s):
answer = ''
# 문자열 s를 공백을 기준으로 분리합니다.
for st in s.split(' '):
# 단어 st를 기준으로 변환합니다.
for i, c in enumerate(st):
# 인덱스가 홀수라면
if i % 2:
answer += c.lower()
# 인덱스가 짝수라면
else:
answer += c.upper()
answer += ' '
return answer[:-1]
파이썬을 사용하실 때 중요한 점은 split 함수에 ' '을 명시해주는 것입니다.
split 함수를 기본형으로 사용하시면 연속되는 공백을 하나의 단어로 취급하게 됩니다.
따라서 " TRy HElLo WORLD "의 경우를 "TrY HeLlo WoRlD"로 변환시키죠.
하지만 ' '이라고 명시를 해준다면 공백 하나당을 기준으로 문자열을 분리해주기 때문에, 이 문제에서 벗어날 수 있습니다.
'입문문제' 카테고리의 다른 글
| [연습문제] 자연수 뒤집어 배열로 만들기 (0) | 2024.11.14 |
|---|---|
| [연습문제] 자릿수 더하기 (0) | 2024.11.13 |
| [연습문제] 약수의 합 (0) | 2024.11.11 |
| [연습문제] 시저 암호 (0) | 2024.11.08 |
| [연습문제] 문자열을 정수로 바꾸기 (0) | 2024.11.07 |