일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 오블완
- dfs
- DP
- Java
- level 3
- join
- 프로그래머스
- programmers
- 너비 우선 탐색
- bfs
- Lv. 2
- 소프티어
- 파이썬
- C언어
- SQL 고득점 KIT
- Lv. 3
- group by
- javascript
- softeer
- 동적계획법
- 깊이 우선 탐색
- Python
- Lv. 0
- select
- 티스토리챌린지
- LEVEL 2
- SQL
- Lv. 1
- Dynamic Programming
- 자바스크립트
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 0] 대소문자 바꿔서 출력하기 {언어 : C언어} 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/181949?language=c
정답 코드
#include <stdio.h>
#define LEN_INPUT 21
int main(void) {
char s1[LEN_INPUT];
scanf("%s", s1);
for (int i = 0; s1[i] != '\0'; i++) {
if(s1[i] >= 'A' && s1[i] <= 'Z')
s1[i] +=32;
else if(s1[i] >= 'a' && s1[i] <= 'z')
s1[i] -=32;
printf("%c", s1[i]);
}
return 0;
}
풀이 방법
- LEN_INPUT의 값을 "\0"을 포함하여 20 + 1로 만든다
- 반복문을 통해 "\0"가 나올 때까지 반복한다. (문자의 끝 부분)
- 아스키코드를 이용해서 대문자와 소문자가 32가 차이나는 것을 고려하여 소문자는 - 32 대문자는 + 32를 해준다.
느낀점
- 그래도 파이썬 배웠다고 어느정도 가다는 있음
인덱스를 사용하는 for 루프 예제
#include <stdio.h>
int main() {
char str[] = "hello";
for (int i = 0; str[i] != '\0'; i++) {
printf("%c\n", str[i]);
}
return 0;
}
포인터를 사용하는 while 루프 예제
#include <stdio.h>
int main() {
char str[] = "hello";
char *p = str; // str의 첫 번째 문자를 가리키는 포인터
while (*p != '\0') {
printf("%c\n", *p);
p++; // 포인터를 다음 문자로 이동
}
return 0;
}
추가로 비트 연산 사용
#include <stdio.h>
#define LEN_INPUT 21
int main(void) {
char s1[LEN_INPUT];
scanf("%s", s1);
for (int i = 0; s1[i] != '\0'; i++) {
s1[i] ^= 32;
printf("%c", s1[i]);
}
return 0;
}
영문 알파벳의 대문자와 소문자 사이에는 ASCII 코드 값에 일정한 차이가 있습니다. 이 차이는 32입니다. ASCII 코드 표에서 대문자 'A'의 코드 값은 65이고, 소문자 'a'의 코드 값은 97입니다. 이 차이(32)는 대문자와 소문자 간의 변환에 사용됩니다.
ASCII에서 대문자와 소문자 사이의 차이를 이용한 대소문자 변환의 원리를 이해하기 위해, 비트 연산의 개념을 알아야 합니다. 특히, XOR 연산(^)은 이 경우 유용하게 사용됩니다.
비트 XOR 연산과 대소문자 변환
비트 XOR 연산은 두 비트가 서로 다를 때 1을, 같을 때 0을 반환합니다. ASCII 코드에서 대문자와 소문자 사이의 차이는 32이며, 이는 2진수로 00100000입니다. 이 비트를 대소문자 알파벳의 ASCII 코드 값에 XOR 연산하면, 대소문자가 서로 변환됩니다.
- 대문자에서 소문자로 변환: 대문자 알파벳의 ASCII 코드에 00100000을 XOR 하면, 5번째 비트가 0에서 1로 변하면서 소문자로 변환됩니다.
- 소문자에서 대문자로 변환: 소문자 알파벳의 ASCII 코드에 00100000을 XOR 하면, 5번째 비트가 1에서 0으로 변하면서 대문자로 변환됩니다.
예시
예를 들어, 대문자 'A'의 ASCII 코드는 65(01000001)입니다. 이 값에 00100000(32)을 XOR 연산하면, 결과는 97(01100001)이 되어 소문자 'a'의 ASCII 코드 값과 일치합니다.
01000001 (대문자 'A'의 ASCII 코드)
XOR 00100000 (32)
= 01100001 (소문자 'a'의 ASCII 코드)
반대로, 소문자 'a'의 ASCII 코드는 97(01100001)입니다. 이 값에 00100000(32)을 XOR 연산하면, 결과는 65(01000001)이 되어 대문자 'A'의 ASCII 코드 값과 일치합니다.
이렇게 XOR 연산을 사용하면, 영문 알파벳의 대소문자 변환을 간단하게 수행할 수 있습니다. XOR 연산은 특정 비트를 토글(toggle, 즉 0을 1로, 1을 0으로 바꾸는 작업)하는 데 사용되므로, 이러한 속성을 이용해 대소문자 변환에 활용하는 것입니다.
'개발 언어 입문 > C언어' 카테고리의 다른 글
프로그래머스 [Lv. 0] 덧셈식 출력하기 {언어 : C언어} (0) | 2024.02.14 |
---|---|
프로그래머스 [Lv. 0] 특수문자 출력하기 {언어 : C언어} (0) | 2024.02.14 |
프로그래머스 [Lv. 0] 문자열 반복해서 출력하기 {언어 : C언어} (0) | 2024.02.14 |
프로그래머스 [Lv. 0] a와 b 출력하기 {언어 : C언어} (0) | 2024.02.14 |
프로그래머스 [Lv. 0] 문자열 출력하기 {언어 : C언어} (0) | 2024.02.14 |