
두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.
문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
skip에 있는 알파벳은 제외하고 건너뜁니다.
예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.
두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.
5 ≤ s의 길이 ≤ 50
1 ≤ skip의 길이 ≤ 10
s와 skip은 알파벳 소문자로만 이루어져 있습니다.
skip에 포함되는 알파벳은 s에 포함되지 않습니다.
1 ≤ index ≤ 20
function solution(s, skip, index) {
const alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
"u", "v", "w", "x", "y", "z"].filter(c => !skip.includes(c));
var answer = s.split("")
.map((a) => alphabet[(alphabet.indexOf(a) + index) % alphabet.length])
.join("");;
return answer;
}
alphabet 배열 생성 후 filter 함수를 사용해서 skip문자를 제거한 배열을 반환 받고 map 함수를 사용해 현재 알파벳 + index에 위치한 값을 반환한다.
배열의 요소를 순회하면서 콜백 함수를 사용해 원하는 조건에 따라 필터링하는 함수
=> 위 문제의 경우 skip에 포함되어있는 값을 제외하고 반환.
소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시.
- 아키텍처 패턴이 주는 이점과 비용에 대한 확실한 이유
- 해당 아키텍처 패턴을 채택시 얻을 수 있는 장단점을 명확하게 인지
- 여러 계층 추가를 위해 들이는 노력과 시간을 투자할 만한 가치가 있을정도로 어플리케이션과 도메인이 복잡한 경우에만 도입
=> 가벼운 어플리케이션에 복잡한 아키텍처 패턴을 도입하는건 의미 없는 코스트가 소모될 수 있음.
시스템을 여러 계층으로 분리하여 관리하는 아키텍처 패턴.
핵심 : 각 계층이 높은 응집도를 가지면서, 다른 계층과는 결합되를 최소화 하는 것. => 상위 계층은 하위 계층을 사용 가능하지만 하위 계층은 자신이 어떤 상위 계층에 속하는지 알 필요없이 독립적으로 동작해야함.
- 관심사를 분리해서 구현하려는 코드를 명확하게 인지 가능
- 각 계층이 서로 독립적이고 의존성이 낮아 모듈 교체시 코드 수정이 용이
- 계층별로 단위 테스트를 작성할 수 있으 테스트 코드를 조금 더 용이하게 구성가능



- 클라이언트가 어플리케이션에 요청을 보냄.
- 요청을 URL에 알맞은 컨트롤러가 수신받음.
- 컨트롤러가 요청을 처리하기 위해 서비스를 호출.
- 서비스가 필요한 데이터를 가져오기 위해 저장소에게 데이터를 요청.
- 서비스가 저장소에서 가져온 데이터를 가공해서 컨트롤러에게 데이터를 전달.
- 컨트롤러가 서비스의 결과물을 클라이언트에게 전달.