코테/프로그래머스

[프로그래머스/Lv. 1] 둘만의 암호

imname1am 2023. 4. 4. 12:23
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🔺 코드

 

[Java] 둘만의 암호 - Lv1 프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/155652# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

mag1c.tistory.com

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        
        // 문자열을 char 배열로 변환
        char[] chArr = s.toCharArray();
        
        // 문자열의 각 문자에 대해 index만큼 적용
        for(int i = 0 ; i < chArr.length ; i++) {
            // index만큼 적용하는 반복문
            for(int j = 0 ; j < index ; j++) {
                // 각 문자에 index만큼 더함
                chArr[i]++;
                
                // 'z'를 넘어갈 경우 알파벳 순환
                if(chArr[i] > 'z') {
                    chArr[i] -= 26;
                }
                
                // skip 문자열에 해당 문자가 있을 경우 알파벳 순환
                while(skip.contains(String.valueOf(chArr[i]))) {
                    chArr[i]++;
                    
                    if(chArr[i] > 'z') {
                        chArr[i] -= 26;
                    }
                }
            }
        }
        
        // char 배열을 다시 문자열로 변환하여 리턴
        return String.valueOf(chArr);
    }
}
  1. 먼저 문자열 s를 char 배열로 변환한다.
  2. 각 문자에 대해 index만큼 적용하는 반복문을 수행한다.
  3. 각 문자에 index를 더한다.
  4. 만약 문자가 'z'를 넘어갈 경우, 알파벳을 순환시킨다. (예 : 'z' + 1 = 'a')
  5. 만약 skip 문자열에 해당하는 문자일 경우, 알파벳을 순환시킨다. 이를 위해서 while 반복문을 사용한다.
  6. 마지막으로 char 배열을 다시 문자열로 변환하여 리턴한다.

5번째 - while문 쓸 생각을 못 했다.ㅠ


🔺 다른 풀이들

- 풀이1)

 

프로그래머스 연습문제 둘만의 암호 [JAVA] - 23년 2월 16일

 

velog.io

Set이랑 StringBuilder를 사용하셨다.

 

 

- 풀이2)

class Solution {
    public String solution(String s, String skip, int index) {
        StringBuilder answer = new StringBuilder();

        for (char letter : s.toCharArray()) {
            char temp = letter;
            int idx = 0;
            while (idx < index) {
                temp = temp == 'z' ? 'a' : (char) (temp + 1);
                if (!skip.contains(String.valueOf(temp))) {
                    idx += 1;
                }
            }
            answer.append(temp);
        }

        return answer.toString();
    }
}

깔끔 그 자체...

 

 

- 풀이3)

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";

        for (char c : s.toCharArray()) {
            for (int i = index; i > 0; i--) {
                c++;
                if (c > 122) c -= 26;

                while (skip.contains(String.valueOf(c))) {
                    c++;
                    if (c > 122) c -= 26;
                }
            }
            answer += c;
        }
        return answer;
    }
}

내 기준 제일 깔끔!!


(참고)

✔ 문자열 포함 여부 확인 : contains

 

[JAVA] 자바_contains (문자열 포함 여부 확인)

- 문자열 포함 여부 확인하기 (ft. contains) - contains() - boolean contains(CharSequence s) - contains() 함수는 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이다. - 대/소문자를 구분한다. 예제 1

mine-it-record.tistory.com

 

반응형