728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/155652#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해설
3가지 요소, 문자열 s, skip과 자연수 index가 존재합니다
1. 문자열 s의 각 문자를 index만큼 뒤의 알파벳으로 바꿔줍니다
(s ="abd", index = 2 이라면 "cdf")
2. 이때 알파벳이 'z'를 넘어간다면 'a'로 돌아가 그 다음 알파벳으로 바꿉니다
(s = "xyz", index = 2 이라면 "zab")
3. 또한 skip에 있는 알파벳은 제외하고 건너뜁니다
(s = "ace", index=4, skip="d" 이라면 "fhi")
1번 조건을 만족시키기 위해 s의 각 문자 cur에서 index만큼 더해 바뀌는 알파벳을 확인합니다
2번 조건을 위해서 cur+index의 값이 'z' 에 해당되는 값을 넘긴다면 'a'로 되돌려 줍니다.
3번 조건을 위해서 하나씩 다음 알파벳으로 바꾸며, 바뀐 알파벳이 skip에 해당된다면 한번 더 바뀌도록 합니다
s의 길이가 최대 50이고, skip의 최대 길이가 10, index는 최대 20이므로
for문을 사용하는 최악의 경우이라도 50 * 10 * 20 = 10000가 되어 구현 방식을 자유롭게 두어도 괜찮다고 생각됩니다.
주의점
- 경계값 ('a', 'z')
- 건너뛰면서 제외되는 알파벳이 포함되는 경우
코드
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
for(int i=0;i<s.length();i++){
char cur = s.charAt(i);
for(int j=0;j<index;j++){
cur++;
if(cur>'z'){
cur-=26;
}
if(skip.contains(String.valueOf(cur))) j--;
}
answer += cur;
}
return answer;
}
}
728x90
'[IT] 코딩테스트 > [문제 및 풀이] 프로그래머스' 카테고리의 다른 글
[프로그래머스] 최소직사각형 / 자바(Java) (0) | 2023.08.22 |
---|---|
[프로그래머스] 개인정보 수집 유효기간 / 자바(Java) (0) | 2023.08.16 |
[프로그래머스] 숫자 짝궁 / 자바(Java) (0) | 2023.08.15 |
[프로그래머스] 햄버거 만들기 / 자바(Java) (0) | 2023.08.14 |
[프로그래머스] 문자열 나누기 / 자바(Java) (0) | 2023.08.13 |