-
[프로그래머스] 시저암호 자바코딩테스트 2025. 4. 7. 19:20반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12926
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
s는 소문자와 대문자, 공백 3가지 요소로 구성된 문자열이다. n은 각 문자열을 뒷문자로 이동시킬 값이다.
ex) n = 1, s = 'AB' -> answer = 'BC'
제한사항
1.'z' 와 'Z'의 다음값은 'a' 와 'A'이다.
2.' '은 이동시켜도 변하지 않음.접근
1.s를 문자별로 확인해서 공백이 아니면
2. 'z'나 'Z' 혹은 그 외의 경우에 이동처리를 한다.public String solution(String s, int n) { StringBuilder answer = new StringBuilder(); for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); if(c != ' '){ if( c == 'z' ) { c = 'a'; c += (n -1); } else if( c == 'Z') { c = 'A'; c += (n -1); } else { c += n; } } answer.append(c); } return answer.toString(); }
발견된 문제
1.알파벳 범위 초과: 'z' 또는 'Z'를 넘어갈 때 올바르게 처리되지 않음
2.대소문자 구분: 대문자와 소문자를 구분하여 처리해야 함수정
1. 소문자와 대문자 체크를 따로 한다.
2. 이동처리 효율화 -> 소문자 : (c - 'a' + n % 26) + 'a' 대문자 : (c - 'A' + n % 26) + 'A'public String solution2(String s, int n) { StringBuilder answer = new StringBuilder(); for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); //소문자 if( 'a' <= c && c <= 'z'){ c = (char) (( (c - 'a' + n) % 26 ) + 'a'); } else if('A' <= c && c <= 'Z') { c = (char) (( (c - 'A' + n) % 26 ) + 'A'); } answer.append(c); } return answer.toString(); }
알게된 점
character의 연산.
숫자는 c - '0' , 소문자는 c - 'a', 대문자는 c - 'A' 를 통해 정확한 값을 얻는다.반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 문자열 내 마음대로 정렬하기 자바 list.sort Comparator (0) 2025.04.08 [프로그래머스] 소수 찾기 자바 에라스토테네스의 체 (0) 2025.04.07 [프로그래머스] 이상한 문자 만들기 자바 toUpper / toLowerCase (0) 2025.04.07 [프로그래머스] 최대공약수와 최소공배수 자바 유클리드 호제법 (1) 2025.04.07 [프로그래머스] 비밀지도 이진법 (0) 2025.04.06