반응형
SMALL
이제서야 시작해보는 코테 준비 ,, 아자자
요즘 새롭게 벌인 일들이 좀 있는데 다 잘해보려고 노력 중이다
지치지 말자 :)
프로그래머스 <시저 암호> 문제 보기
https://school.programmers.co.kr/learn/courses/30/lessons/12926
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 <시저 암호> 문제 풀이
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i=0; i<s.length(); i++){
char check = s.charAt(i);
if(check == ' '){
answer += " ";
continue;
}
char next = (char)((int)check + n);
if(65 <= check && check <= 90){
if(next > 90) next -= 26;
}
if(97 <= check && check <= 122){
if(next > 122) next -= 26;
}
answer += String.valueOf(next);
}
return answer;
}
}
- 문자열 s를 한 글자씩 char 자료형의 check로 빼와서 계산하는 방식
- 공백일 경우 그대로 공백을 붙여줌
- check에 n만큼 더한 next 변수를 만들어줌
- check가 대문자인지 소문자인지 구분한 후, next 변수의 값이 그 범위 벗어나는 거 체크
- 예를 들어, z 에 1이 더해지면 a 가 되어야 함 -> 이 부분 체크
개인적으로 내 풀이를 보고 스스로에게 아쉬웠던 점은
- 알파벳이 26글자임을 알면서 나머지 계산할 생각을 하다가 중간에 포기했다는 것
- char 문자로 비교 구문을 사용하지 않고 아스키 코드를 대신 가져왔다는 것
다른 풀이
class Caesar {
String caesar(String s, int n) {
String result = "";
n = n % 26;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLowerCase(ch)) {
ch = (char) ((ch - 'a' + n) % 26 + 'a');
} else if (Character.isUpperCase(ch)) {
ch = (char) ((ch - 'A' + n) % 26 + 'A');
}
result += ch;
}
return result;
}
public static void main(String[] args) {
Caesar c = new Caesar();
System.out.println("s는 'a B z', n은 4인 경우: " + c.caesar("a B z", 4));
}
}
- Character의 isLowerCase(), isUpperCase() 함수를 사용해서 대소문자 판별
- 26 나머지 계산을 하기 위해 시작점만큼 빼주었다가 이후에 다시 더해주는 방식
- 소문자에서는 'a'를 빼주었다가 다시 더해줌
- 대문자에서는 'A'를 빼주었다가 다시 더해줌
회사 다닌다고 안주해서 코딩테스트에 굉장히x9999 소홀해져 있었는데 그동안 머리가 많이 굳은 느낌이다...
다시 불태워야지 ㅠ 🔥
반응형
LIST
'알고리즘 공부 > 코딩테스트(프로그래머스)' 카테고리의 다른 글
[프로그래머스 Level 3] 이중우선순위큐 (Java 자바) (0) | 2023.09.11 |
---|---|
[프로그래머스 Level 1] 삼총사 (Java 자바) (0) | 2023.06.21 |
[프로그래머스 Level 1] 과일 장수 (Java 자바) 풀이 방법 (0) | 2023.03.29 |
[프로그래머스 Level 2] 디펜스 게임 (Python 파이썬) 풀이 방법 (0) | 2023.01.19 |
[프로그래머스 Level 3] 가장 먼 노드 (Python 파이썬) 풀이 방법 (0) | 2023.01.18 |