import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); int i = 0; String answer = ""; while (i < a.length()) { char c = a.charAt(i); if (c >= 'a' && c <= 'z') { c = (char)(c - ' '); } else if (c >= 'A' && c <= 'Z') { c = (char)(c + ' '); } answer += String.valueOf(c); i++; } System.out.print(answer); } }
- 문자열을 입력받았을때 대문자가 있다면 소문자로, 소문자가 있으면 대문자로 변환하여 출력하는 문제입니다.
- 대소문자를 판별하기 위해 while문을 실행하였습니다.
2-1. char c를 통해 문자열에 있는 문자 하나하나를 변환하여 주었습니다.
2-2. char 타입은 문자를아스키 코드
로 인식하기 때문에A = 65, a = 97, ' ' = 32(공백)
인 점을 응용하였습니다.
2-3. A를 소문자로 바꾸기 위해서는 아스키 코드 상에서 32을 더해주어야하기 때문에 32번째인 공백을 더해주어 소문자로 변환하여주었습니다.
2-4. 이와 반대로, a를 대문자로 바꿔주기 위해서는 공백만큼 빼주어 변환하도록 하였습니다.- answer에
String.valueOf
를 사용하여 문자를 하나하나 붙여주어 출력하였습니다.
StringBuilder
를 이용하여 문제를 풀게 되면 불변성인 String을 더욱 효율적으로 사용할 수 있습니다.String.value
를 여러번 호출하여 메모리 성능을 낮추는 것보다 가변성을 가진 문자열 클래스를 사용하는것이 더욱 효과적입니다.
아래는StringBuilder
를 이용하여 문제를 풀었습니다.
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); int i = 0; StringBuilder sb = new StringBuilder(); while (i < a.length()) { char c = a.charAt(i); if (c >= 'a' && c <= 'z') { c = (char)(c - ' '); } else if (c >= 'A' && c <= 'Z') { c = (char)(c + ' '); } sb.append(c); i++; } System.out.print(sb.toString()); } }
append를 통하여 sb에 변환된 문자를 누적하였고, toString을 통하여 문자열을 얻었습니다.