Q. 문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
function solution(my_string, num1, num2) { let answer = ''; let Dex = [...my_string] for (let i in Dex) { if( i == num1) { answer += Dex[num2] } else if (i == num2) { answer += Dex[num1] } else { answer += Dex[i] } } return answer; }
- 1단계. 파라미터가 문자열이라는 것을 감안해서 전개구문으로 전개하여 새로운 변수에 선언한다.
- 2단계. 본 문제의 핵심은 인덱스를 바꾸는 것이기에, for in 문을 사용하여 순환시킨다.
- 3단계. for in문 안에 조건문으로 인덱스 num1과 num2를 바꾸면서 정답에 요소들이 누적되도록 코드를 작성한다.
function solution(my_string, num1, num2) { my_string = my_string.split(""); [my_string[num1],my_string[num2]] = [my_string[num2],my_string[num1]] return my_string.join(""); }
- 이 풀이가 문제의 취지를 가장 잘 파악한 문제라고 생각한다.(물론 내가 푼 것은 아님)
- 1단계. 본 문제는 요소의 인덱스를 바꾸는 것이지만, 결국 요소끼리 자리를 바꾸면 되기에, 구조분해할당을 이용하여 구조를 재설정하면 된다.
- 2단계. 파라미터가 문자열로 되어있기에 이를 split("")으로 요소들이 나뉘어진 배열로 바꾼다
- 3단계. 구조분해할당을 이용하여, 배열의 요소들의 위치를 바꾼다.
- 4단계. 파라미터가 배열이 되었기에 정답에는 join("")을 사용하여 문자열로 바꾸어 반환한다.
function solution(my_string, num1, num2) { my_string = my_string.split("") return my_string.map((v,i) => i === num1 ? my_string[num2] : i === num2 ? my_string[num1] : v).join(""); }
- 1단계. 파라미터가 문자열로 되어있기에 이를 split("")으로 요소들이 나뉘어진 배열로 바꾼다
- 2단계. 배열 내 요소들에 변화를 주는 것이기에, map메서드를 사용하며, 주어진 인덱스 간에 요소들을 바꿀 수 있는 조건 코드를 삼항 연산자로 작성한다.
- 3단계. 파라미터가 배열이 되었기에 정답에는 join("")을 사용하여 문자열로 바꾸어 반환한다.
Q. 문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
function solution(s) { let answer = ''; let STR = [...s].sort() if(STR[0] != STR[1]){ answer += STR[0]; } for (let i = 1; i < STR.length ; i++){ if (STR[i-1] != STR[i]) { if(STR[i] != STR[i+1]){ answer += STR[i]; } } } return answer; }
- 1단계. 정답이 사전 순으로 나와야 하기 때문에, 파라미터에 전개구문과 sort()를 사용하여 알파벳 순으로 정렬된 배열로 만든다.
- 2단계. 사전 순으로 정렬된 배열에서 한 번만 나오는 문자는 자신의 앞뒤의 문자와 다르다는 조건을 갖고 있다는 것을 파악한다.
- 3단계. for문으로 반복문을 작성하되, 인덱스의 변수가 0부터 시작하면 자신 앞의 문자가 없기때문에 시작은 1로 진행한다.
- 4단계. 0번째 요소를 판별하지 못했기 때문에, 이를 판별하는 조건문을 for문 앞에 작성한다.
function solution(s) { s = s.split("").sort() return s.filter((v,i) => s[i-1] != s[i] && s[i] != s[i+1]) .join(""); }
- 1단계. 정답이 사전 순으로 나와야 하기 때문에, 파라미터에 split("")과 sort()를 사용하여 알파벳 순으로 정렬된 배열로 만든다.
- 2단계. 자신의 앞뒤의 문자와 비교하는 조건을 비교연산자와 논리연산자로 작성한 filter()를 사용하여 한 번만 나온 문자를 걸러낸다.