class Solution { public String solution(String my_string) { String answer = ""; int i = 0; while(i < my_string.length()) { char c = my_string.charAt(i); if(c >= 'a' && c <= 'z') { answer = answer + (char)(c - ' '); } else if(c >= 'A' && c <= 'Z') { answer = answer + (char)(c + ' '); } i++; } return answer; } }
- 문자열 안의 대문자와 소문자를 대문자 -> 소문자, 소문자 -> 대문자로 만드는 문제입니다.
- replaceAll로 바꾸기에는 소문자 -> 대문자로 바꿨을 경우 전부 대문자가 되기 때문에 사용할 수 없다고 생각했습니다.
- 접근 방식을 아스키 코드로 생각하였습니다.
3-1. 아래 아스키 코드 표를 첨부하였습니다.
3-2. 대문자 아스키 코드 + 32(space)를 하게 되면 소문자로 인식되며, 소문자 아스키 코드 - 32(space)를 하게 되면 대문자로 인식됩니다.- c - ' '를 하게 되면 소문자 -> 대문자로 바뀌게 되고, c + ' '를 하게 되면 대문자 -> 소문자로 바뀌게 됩니다.
4-1. 이때 c - ' ' 과 c + ' '는 아스키 코드 숫자로 나타나게 되어 문자로 나타나게 하려면 명시적 형변환을 진행해주어야 합니다.
4-2. 명시적 형변환 char를 진행해주어 문자열에 문자가 들어가도록 해줍니다.
문자 | 대문자 아스키 코드 | 소문자 아스키 코드 | 알파벳 |
---|---|---|---|
A | 65 | 97 | a |
B | 66 | 98 | b |
C | 67 | 99 | c |
D | 68 | 100 | d |
E | 69 | 101 | e |
F | 70 | 102 | f |
G | 71 | 103 | g |
H | 72 | 104 | h |
I | 73 | 105 | i |
J | 74 | 106 | j |
K | 75 | 107 | k |
L | 76 | 108 | l |
M | 77 | 109 | m |
N | 78 | 110 | n |
O | 79 | 111 | o |
P | 80 | 112 | p |
Q | 81 | 113 | q |
R | 82 | 114 | r |
S | 83 | 115 | s |
T | 84 | 116 | t |
U | 85 | 117 | u |
V | 86 | 118 | v |
W | 87 | 119 | w |
X | 88 | 120 | x |
Y | 89 | 121 | y |
Z | 90 | 122 | z |
------ | |||
Space | 32 |