주녘공부일지

[프로그래머스 C#] Lv.1 둘만의 암호 본문

CodingTest/Programmers Lv.1

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

주녘 2023. 8. 23. 16:08

https://school.programmers.co.kr/learn/courses/30/lessons/155652

 

프로그래머스

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

programmers.co.kr

1. 정답코드 및 핵심 아이디어, 유의사항

- 직관적으로 풀어도 풀리는 문제

    using System;
    using System.Collections.Generic;

    public class Solution
    {
        public string solution(string s, string skip, int index)
        {
            string answer = "";
            List<int> list = new List<int>();
            
            // 아스키 코드 값 리스트
            foreach (char c in skip)
                list.Add(c);
            
            // 변환하는 문자열의 길이만큼 반복
            for (int i = 0; i < s.Length; i++)
            {
                int num = s[i];
                
                // 인덱스 값만큼 1씩 더해가면서 예외상황 체크
                for (int j = 0; j < index; j++)
                {
                    num++;
                    
                    // 범위 벗어남
                    if ('z' < num)
                        num = 'a';
                    
                    // skip list에 해당
                    if (list.Contains(num)) 
                        j--;
                }

                answer += (char)num;
            }
            
            return answer;
        }
    }

+ 문제를 풀고 나서 다른 사람의 아주 짧은 코드들을 보고 난 후, StringBuilder를 사용해서 a~z까지의 값을 미리 넣어 놓은 후 skip에 있는 값을 찾아서 지우고 해당하는 인덱스만큼 이동해서 추출하는 것도 괜찮은 아이디어라는 생각이 들었음