# 문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181949
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.
<제한 사항>
- 1 <= str의 길이 <= 20
- str은 알파벳으로 이루어진 문자열입니다.
<입출력 예>
- 입력 #1
aBcDeFg
- 입력 #2
AbCdEfG
<solution.c>
#include <stdio.h>
#define LEN_INPUT 10
int main(void) {
char s1[LEN_INPUT];
scanf("%s", s1);
return 0;
}
<solution.py>
str = input()
2. 풀이 과정 (C / Python)
2.1 C 언어
1) 아스키 코드 계산
소문자와 대문자의 십진수 아스키 코드를 살펴보면, 소문자는 'a ~ z' (97 ~ 122)에 해당되고, 대문자는 'A ~ Z' (65 ~ 90)에 해당된다. 즉, 소문자와 대문자의 아스키 코드는 32만큼 차이가 난다.
따라서, 반복문으로 배열의 인덱스에 접근 후, 소문자를 만나게 되면 32를 빼주고 대문자를 만나면 32를 더하는 방식으로 문제를 해결하였다.
#include <stdio.h>
#include <string.h>
#define LEN_INPUT 10
int main(void) {
char s1[LEN_INPUT];
scanf("%s", s1);
int len = strlen(s1);
for (int i = 0; i < len; i++) {
if (s1[i] >= 'a' && s1[i] <= 'z') {
s1[i] -= 32;
}
else if (s1[i] >= 'A' && s1[i] <= 'Z') {
s1[i] += 32;
}
}
printf("%s", s1);
return 0;
}
2) C 언어 대소문자 변환 라이브러리 사용
- ctype.h
- 소문자 판별 : islower
- 대문자 판별 : isupper
- 소문자 -> 대문자 : toupper
- 대문자 -> 소문자 : tolower
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LEN_INPUT 10
int main(void) {
char s1[LEN_INPUT];
scanf("%s", s1);
int len = strlen(s1);
for(int i = 0; i < len; i++) {
// 소문자 판별
if islower(s1[i]) {
// 소문자 -> 대문자
s1[i] = toupper(s1[i]);
}
// 대문자 판별
else if isupper(s1[i]) {
// 대문자 -> 소문자
s1[i] = tolower(s1[i]);
}
}
printf("%s", s1);
return 0;
}
2.2 Python
1) 대소문자 변경 메소드 사용
- 문자열 str
- 소문자 판별 : str.islower()
- 대문자 판별 : str.isupper()
- 소문자 -> 대문자 : str.upper()
- 대문자 -> 소문자 : str.lower()
str = input()
a = ''
for i in str:
# 소문자 판별
if (i.islower()) :
# 소문자 -> 대문자
a = a + i.upper()
else :
# 대문자 -> 소문자
a = a + i.lower()
print(a)
참고자료 및 출처