728x90
[Java] 프로그래머스 : 둘만의 암호
https://school.programmers.co.kr/learn/courses/30/lessons/155652
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근
문자열 s를 문자 단위로 순회하면서 각각의 값을 Strnig으로 변환하여 skip에 값이 있는 경우를 건너뛰도록 하는 방식으로 접근했다.
코드1
class Solution {
public String solution(String str, String skip, int index) {
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
int cnt = 0;
String s = "";
int num = (int)c;
while (cnt < index) {
if ((char)num == 'z') { // 현재 문자가 z면 a의 아스키코드로 변환
num = 97;
}
else num++; // 아니면 그냥 아스키 코드 값을 증가시킴
s = String.valueOf((char) num);
if (skip.contains(s)) {
continue;
}
else {
cnt++;
}
}
sb.append(s);
}
return sb.toString();
}
}
위에 코드가 좀더 직관적인 것 같긴 하지만 불필요하게 선언된 변수가 너무 많아서 아래와 같이 개선했다.
c = (char) ( (c - 'a' + 1) % 26 + 'a');
문자 c는 아스키코드 값으로 97(a) ~ 122(z) 범위내로 한정시켜야 하므로, 위와 같은 방식을 사용했다.
코드2
class Solution {
public String solution(String str, String skip, int index) {
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
int cnt = 0;
while (cnt < index) {
c = (char) ( (c - 'a' + 1) % 26 + 'a');
if (!skip.contains(String.valueOf(c))) {
cnt++;
}
}
sb.append(c);
}
return sb.toString();
}
}
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[Java] 프로그래머스 : 크레인 인형뽑기 게임 (0) | 2023.08.07 |
---|---|
[Java] 프로그래머스 : 달리기 경주 (0) | 2023.08.07 |
[Java] 프로그래머스 : 체육복 (0) | 2023.08.03 |
[Java] 프로그래머스 : 옹알이(2) (0) | 2023.08.02 |
[Java] 프로그래머스 : 숫자 짝꿍 (0) | 2023.08.01 |