-
[5월 셋째 주 #2-1][알고리즘] 백준 2744번 : 대소문자 바꾸기Algorithm/코알못 알고리즘 스터디 2022. 5. 22. 18:33
이번 주 문제
1️⃣ 백준 2744번 : 대소문자 바꾸기
2️⃣ 백준 1920번 : 수 찾기
1️⃣ 백준 2744번 : 대소문자 바꾸기
2744번: 대소문자 바꾸기
영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.
www.acmicpc.net
⎈ 문제 분석
문제를 읽자마자 떠오른 해결방안.
1. 문자열 순회하며 하나씩 처리
2. character 형으로 유니코드 관련하여 처리
유니코드 이용한 처리가 그냥 문자를 수정하는 것 보다 더 나은지에 대한 것을 고민한 결과, 소문자와 대문자를 char형 타입에서 구분하려면 유니코드를 이용하는 것이 구현 편의성이나 성능면에서도 더 나을 것으로 판단하였다.
유니 코드 문자 백과 사전
유니 코드 문자 검색 웹 서비스. 즐겨 찾는 문자를 찾아서 복사하십시오 : 😎 에모지, ️ 화살표, ✪ 별, 💲 통화, 🈂️ 글쓰기 시스템 및 기타 🚩
unicode-table.com
위 사이트에서 각 문자의 유니코드를 볼 수 있는데, 문자를 클릭했을 시 '유니 코드 번호'가 아닌 'HTML코드' 부분의 숫자를 봐야한다. 자바에서 char형은 int형으로 형변환했을 때 'HTML코드'부분의 숫자로 바뀌게 된다.
유니코드에서 대문자 'A' 는 65, 소문자 'a'는 97 정도는 외워두는게 좋다.
[참고]자바에서 char타입은 정수로 저장되기 때문에 다음과 같이 char형 변수를 사용할 수 있다.
char a = 65; // a를 출력하면 A가 출력된다.
⎈ 코드
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = scanner.next(); String result=""; for(int i=0;i<input.length();i++){ char tmp = input.charAt(i); if( 'A'<=tmp && tmp<='Z' ) { // 대문자인 경우 result += Character.toString( (char)(tmp + 32) ) ; } else if( 'a'<=tmp && tmp<='z' ) { // 소문자인 경우 result += Character.toString( (char)(tmp - 32) ) ; } } System.out.println(result); } }
대문자인 경우와 소문자인 경우로 나눠, 문자 하나씩 변환하여 새로운 String 변수인 result 에 저장하였다.
⎈ 고찰
단순하게 주어진 기능을 구현하는 것 뿐이기에, 성능적으로 더 나은 방법이 없을까 고민해보았다.
입력된 문자열 input을 그대로 이용하여, 한 문자를 변환하면 문자열 전체에 해당 문자는 전부 변환되는 방식으로 시도했으나 인덱스 처리 등 오히려 성능이 떨어지는 것 같아 중지하였다.
더 나은 방법이 크게 없는 것 같아 마무리하였다.
'Algorithm > 코알못 알고리즘 스터디' 카테고리의 다른 글
[6월 첫째 주 #5-1][알고리즘] 백준 10828번 : 스택 (0) 2022.06.02 [5월 셋째 주 #2-2][알고리즘] 백준 1920번 : 수 찾기 (0) 2022.05.25 [5월 둘째 주 #2-2][알고리즘] 백준 1541번 : 잃어버린 괄호 (0) 2022.05.11 [5월 둘째 주 #2-1][알고리즘] 백준 5622번 다이얼 (0) 2022.05.10 [5월 첫째 주 #1] (0) 2022.05.02