전체 글

· TIL
매일 알고리즘을 보는데 매일 새로운 메서드들과 만난다. 메서드 엄청 많네.... 오늘 배운 메서드들을 정리해보려고 한다. reverse() reverse 메서드는 '배열'의 정렬 순서를 뒤집어 주는 메서드이다. '정렬의 순서를 바꿔준다' 라는 기능을 통해 다른 메서드들과 조합하면 문자열을 거꾸로 뒤집을 수 있다. // 정렬된 문자열 뒤집기 let str = "ABCDE" let str2 = str.split("").reverse().join(""); console.log(str2) // "EDCBA" // 정렬되지 않은 문자열 내림차순으로 정렬하기 let str = "BADEC" let str2 = str.split("").sort().reverse().join(""); console.log(str2) ..
· Algorithm
문제 및 제한사항 나의 풀이 문제를 풀긴 풀었는데 어제의 알고리즘 문풀에 비해 시간이 배로 걸렸고, 코드의 퀄리티가 배로 좋지 않다. 웬만해서는 알고리즘 문제를 풀고 나면 기분이 진짜 좋은데, 풀고 나서도 기분이 하나도 안좋았다. 일단 어떤 식으로 접근 했는지, 어떤 방법들을 시도했고 어떤 결과에 도출했는지 적어보겠다. 코드를 짜기 전 생각해본 코드 작성 과정은 다음과 같다. 1. (배열의 인덱스가 출력되는 음식의 값이고, 배열의 요소가 주어진 음식의 수이기 때문에) 각 배열의 인덱스와 함께 각사람이 먹을 음식의 수를 정수로 리턴하기. 2. 리턴한 인덱스를 각 사람이 먹을 음식의 수만큼 반복해서 0 앞에 붙이기. 3. 리턴한 인덱스를 각 사람이 먹을 음식의 수만큼 반복해서 0 뒤에 붙이기. 이렇게 구상하..
· Algorithm
문제 나의 풀이 이 문제를 보고 가장 처음 든 생각은 파라미터로 주어진 문자열 n을 한 글자씩 나눠서 새로운 문자가 나올 때 -1을 리턴해줘야 하는데 '어떻게, 새로운 문자가 나왔다!'라는 것을 표현해줄까? 라는 생각이 들었다. 그에 대한 해답으로 문자열의 문자 하나하나를 돌리기 전에 newStr을 빈 문자열로 지정해 준 뒤에 각 문자열이 newStr에 없으면 -1을 answer라는 배열에 넣어주고 newStr에는 현재의 문자를 넣어주는 식으로 반복문을 돌렸다. 반대로 문자열이 존재한다면 그 문자열의 인덱스와 현재 인덱스의 차이만큼을 빼준 값을 answer에 넣으면 되겠다고 생각했다. 하지만 현재의 문자의 위치와 그 전 현재의 문자와 같은 문자의 위치의 차를 구하는 것은 어려웠다. 현재의 문자 위치는 당..
· Algorithm
문제 및 조건 나의 풀이 처음에 이 문제를 접했을 땐, '엥? 그래서 뭘 구하라는거지?' 라는 생각이 들었다. 그리고나서 입출력 예제를 본 후에 '벽'과 '공백'을 나타내는 배열을 만들어야 한다는 것을 알게 되었다. 이 문제를 보자마자 이렇게 풀어야겠다는 생각이 들었다. 그 순서는 다음과 같다.(그 때 노트에 적은 내용 그대로) 1. arr1 2진수 변환(n자리) arr2 2진수 변환(n자리) 2. 2. arr1의 각 요소의 문자열 각각의 자리, arr2의 각 요소의 문자열 각각의 자리에 하나라도 1이 존재하면 새로운 배열의 i번째 자리에 "#" 넣기 3. arr1의 각 요소의 문자열 각각의 자리, arr2의 각 요소의 문자열 각각의 자리에 하나라도 1이 존재하지 않으면 새로운 배열의 i번째 자리에 " ..
· Algorithm
문제 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰 것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴합니다. 제한 조건 n은 1이상 80,000,000,000 이하인 자연수 입니다. 입출력 예 n return 118372 873211 나의 풀이 정수를 내림차순으로 배치해주기 위해 정수를 문자열로 바꾼 후 진행해주었다. 배열로 바꾼 후 그 값을 sort를 이용해 내림차순으로 정렬해주었다. 그 후 문자열인점을 이용해 reduce메서드를 사용해 그대로 붙여주었다. "873211" 이라는 값을 뽑아냈지만 문자열이기 때문에 마지막에 다시 숫자로 변환시켜 주었다. function solution(n) { var answer = ..
· Algorithm
문제 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 제한 사항 n은 1 이상 50,000,000,000,000 이하인 양의 정수입니다. 입출력 예 n return 121 144 3 -1 입출력 예 #1 : 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다. 입출력 예 #2 : 3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다. 나의 풀이 일단, 첫 번째 풀이는 실패했다. 18개의 테스트 코드 중 한 개 빼고 다 맞았지만 무슨 이유에선지 하나의 테스트 코드에서 실패가 떴다. function solu..
· Algorithm
문제 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한조건 s의 길이는 1이상 5 이하입니다. s의 맨 앞에는 부호(+,-)가 올 수 있습니다. s는 부호와 숫자로만 이루어져 있습니다. s는 "0"으로 시작하지 않습니다. 입출력 예 예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다. 나의 풀이 솔직히 풀이랄 것도 없다. function solution(s) { var answer = 0; answer = Number(s); return answer; }
· Algorithm
문제 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return하는 solution 함수를 만들어주세요. 예를 들어 N=123이면 1 + 2 + 3 = 6 을 return하면 됩니다. 제한사항 N의 범위 : 100,000,000 이하의 자연수 입출력 예 N answer 123 6 987 24 입출력 예 #1 : 문제의 예시와 같습니다. 입출력 예 #2 : 9 + 8 + 7 = 24이므로 24를 return하면 됩니다. 나의 풀이 파라미터로 주어진 자연수 N을 각각의 자리로 분해하도록 '문자열'로 만들어 주었다. 그 후 반복문을 돌리는데 다시 숫자로 바꿔준 뒤 반복문을 돌며 모두 합쳐지도록 만들어 주었다. function solution(n){ var answer = 0; let str = Stri..
· Algorithm
문제 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5, 4, 3, 2, 1]을 리턴합니다. 제한조건 n은 10,000,000,000 이하인 자연수입니다. 입출력 예 n return 12345 [5, 4, 3, 2, 1] 나의 풀이 숫자를 반대 순서로 넣어야 하기 때문에 split을 사용해 배열에 넣어준 뒤에 forEach와 unshift를 써서 배열의 앞부분부터 넣어주었다. 그런데 type 이 Number인 경우에는 split이 사용되지 않아 파라미터로 받은 n을 문자열로 변환하여 이 과정을 진행했다. function solution(n) { var answer = []; n = String(n); let result = n.split("")..
윤찬님
찬이_Devlog