728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
이 문제는 문자열에서 조건에 맞게 각각의 문자들을 판별하고, 변환된 문자열을 반환하면 된다.
조건은 다음과 같다.
숫자, 알파벳, 공백으로 이루어진 문자열이 있다.
- 단어의 첫 문자가 알파멧이면, 대문자여야한다.
- 단어의 첫 문자를 제외한 나머지 문자 중 알파벳은 소문자여야 한다.
- 단어는 공백으로 구분된다.
- 숫자는 그대로 출력된다.
이 조건에 맞도록 알파벳을 변환시켜주었다. C++은 아스키코드 값을 활용해서 문자를 변환해주었고, python에서는 upper()와 lower()함수를 통해 변환해줄 수 있었다.
만약 대문자 'A'를 소문자 'a'로 변경해주고 싶다면, 대문자 'A'에 해당하는 아스키코드인 65에 소문자 'a'에 해당하는 아스키코드 값인 97의 차이인 32를 더해주면 된다.
'a' = 'A' + 32의 꼴이 되므로 이 식을 코드에 활용하면 된다.
정답 코드
C++
#include <string>
#include <vector>
using namespace std;
int isalpha(char c) {
return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) ?
((c >= 'a' && c <= 'z') ? 1 : 2) : 0;
}
string solution(string s) {
string answer = "";
if (isalpha(s[0]) == 1) answer += s[0] - 32;
else answer += s[0];
for (int i = 1; i < s.length(); i++) {
if (s[i - 1] == ' ' && isalpha(s[i]) == 1) answer += s[i] - 32;
else if (s[i - 1] == ' ' && isalpha(s[i]) != 1) answer += s[i];
else if (isalpha(s[i]) == 2) answer += s[i] + 32;
else answer += s[i];
}
return answer;
}
C++에서는 파이썬처럼 일괄적으로 upper와 lower함수를 사용할 수 없었기 때문에, 대소문자와 나머지 문자들을 모두 구별해줄 수 있는 함수를 만들어주었다.
isalpha함수를 통해 소문자일 경우 1, 대문자일 경우 2, 나머지 문자일 경우 0을 반환받게 해서 각 조건에 따라서 정확하게 변환할 수 있도록 해 주었다.
python
def solution(s):
answer = ""
if (s[0].isalpha()) :
answer += s[0].upper()
else :
answer += s[0]
for i in range(1, len(s)) :
if s[i - 1] == ' ' and s[i].isalpha() :
answer += s[i].upper()
elif s[i].isalpha() :
answer += s[i].lower()
else :
answer += s[i]
return answer
728x90
'Algorithm > PS' 카테고리의 다른 글
[C++, python] BOJ, 백준 1958 - LCS 3 (1) | 2023.02.25 |
---|---|
[C++, python] 프로그래머스, 올바른 괄호 (0) | 2023.02.24 |
[C++, python] 프로그래머스, 최댓값과 최솟값 (0) | 2023.02.24 |
[C++, python] BOJ, 백준 5569 - 출근 경로 (0) | 2023.02.23 |
[C++, python] BOJ, 2502 - 떡 먹는 호랑이 (0) | 2023.02.22 |