
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 |