2023. 2. 3. 17:19ㆍCS/자료구조 & 알고리즘
문제 출처
[프로그래머스 코딩 테스트 연습]
https://school.programmers.co.kr/learn/courses/30/lessons/155652
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
한 단어를 1번 넘기는 법
char 변수는 ASSCI 코드로 표현이 가능하다.
ASSCI 코드는 간단하게 설명하면 숫자를 이용하여 문자를 표현하는 방법 중 하나이다.
ASCCI 코드를 이용하여 문자에 1을 더하면 ASSCI 코드 상에서 1을 더한 값이 된다.
→ ‘a’ + 1 = ‘b’가 된다.
또한 숫자간에 비교를 통하여 문자의 순서도 비교가 가능하다.
위를 이용하여 ++c > ‘z’가 성립하게 된다.
++c > ‘z’ 가 만족하면 ‘a’로 변하게 하고 아니면 미리 더한 c를 반환하는 것으로 한 단어를 1번 넘길 수 있다.
public char addChar(char c) {
return (++c > 'z') ? 'a' : c;
}
skip 건너 뛰기
문제에서 skip에 해당하는 것은 넘긴다고 했으므로 skip.contains(String.valueof(c))를 이용하여 문자가 skip에 포함되는지 확인이 가능하다.
skip에 포함되면 while을 이용하여 지속적으로 더하면 된다.
c = addChar(c);
while (skip.contains(String.valueOf(c)))
c = addChar(c);
둘만의 암호 풀기
단어를 추가할 String을 먼저 만든다.
이때 문자열이 빈번하게 추가될 것으로 예상함으로 StringBuilder을 이용한다.
이후 s 문자열에서 각각의 char 즉 단어 1개씩 가져와서 index번을 위에 있는 코드를 이용하여 문자를 skip은 건너뛰면서 넘기면 된다.
소스 코드
public class Solution {
public char addChar(char c) {
return (++c > 'z') ? 'a' : c;
}
public String solution(String s, String skip, int index) {
StringBuilder result = new StringBuilder();
for (char c : s.toCharArray()) {
for (int i = 0; i < index; i++) {
c = addChar(c);
while (skip.contains(String.valueOf(c)))
c = addChar(c);
}
result.append(c);
}
return result.toString();
}
}
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
[Programmers] Lv1 문자열을 정수로 만들기 Java (0) | 2023.02.05 |
---|---|
[Programmers] Lv1 햄버거 만들기 Java (0) | 2023.02.04 |
[Programmers] Lv1 개인정보 수집 유효기간 Java (0) | 2023.02.03 |
[Programmers] Lv0 치킨 쿠폰 Java (0) | 2023.02.02 |
[Programmers] Lv0 유한소수 판별하기 Java (0) | 2023.02.02 |