반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/155652
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
문자열 s 와 skip 그리고 index 가 주어졌을 때 아래 규칙에 따라 새로운 문자열을 만든다.
- 문자열 s 의 각 알파벳을 index 만큼 뒤의 알파벳으로 바꿔준다.
- index 만큼 뒤의 알파벳이 z를 넘어갈 경우 다시 a 로 돌아간다.
- skip 에 있는 알파벳을 제외하고 건너뛴다.
제한사항
- 5 <= s 의 길이 <= 50
- 1 <= skip 의 길이 <= 10
- s 와 skip 은 소문자로만 이루어져 있다.
- skip 에 포함되는 알파벳은 s 에 포함되지 않는다.
- 1 <= index <= 20
문제 그대로 풀면된다.
시간 복잡도를 계산해보면
(s 길이 * skip 길이 * index 크기)로 최대 50*10*20 밖에 걸리지 않아 그냥 풀어도 될 거 같다.
하지만 HashMap 을 사용한다면 매번 해당 문자가 skip 에 있는 지 확인 할 필요가 없기 때문에 시간을 좀 더 단축시킬 수 있다.
코드
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
String result = "";
char[] sArr = s.toCharArray();
HashMap<Character, Boolean> skipMap = new HashMap<>();
for (char c : skip.toCharArray()) {
if(!skipMap.containsKey(c)){
skipMap.put(c, true);
}
}
for(int i=0; i<sArr.length; i++){
char cur = sArr[i];
int cnt = index;
while(cnt > 0){
cur++;
if(cur > 122) cur -= 26;
if(skipMap.containsKey((char)cur)) continue;
cnt--;
}
sArr[i] = cur;
}
for (char c : sArr) {
result += c;
}
return result;
}
}
반응형
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 두 큐 합 같게 만들기 (1) | 2024.03.07 |
---|---|
[프로그래머스] 파괴되지 않은 건물 (0) | 2024.03.07 |
[프로그래머스] 주차 요금 계산 (0) | 2024.03.07 |
[프로그래머스] 디스크 컨트롤러 (0) | 2024.02.07 |
[프로그래머스] 자물쇠와 열쇠 (1) | 2024.01.18 |