-
[프로그래머스] JS 없는 숫자 더하기알고리즘/프로그래머스 2022. 4. 13. 21:09
문제 이해하기 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 데이터 추상화 0 ~ 9 까지 들어있는 배열을 만들어 선택되지 않는 값이 무엇인지 발견하도록 하자. let list = [0,1,2,3,4,5,6,7,8,9]; 알고리즘 정수 배열 numbers를 순환하면서 list의 선택된 값은 0을 할당 list 값을 더한 값을 리턴한다. function solution(numbers) { let list = [0,1,2,3,4,5,6,7,8,9] var answer = 0; numbers.forEach( ele => { list[..
-
[프로그래머스] JS 크레인 인형뽑기 게임알고리즘/프로그래머스 2022. 4. 13. 09:10
문제 이해하기 크레인을 모두 작동시켜 사라진 인형의 개수를 return 해야한다. (필자는 몇번 사라졌는지로 잘못이해하여 뻘짓했다.) 데이터 추상화 크레인을 작동시키는 함수로 먼저 추상화하자. 매개 변수인 moves를 활용하자. 자료구조 stack에 크레인으로 잡은 값을 넣자. - stack의 pop을 이용하여 쉽게 구현을 할수 있기에.. 알고리즘 moves.forEach()를 사용하여 크레인을 작동시킨다. 크레인은 board를 가로가 아닌 세로로 동작하기 하기 때문에 세로로 반복문을 돌려준다. 크레인으로 뽑힌 값, stack에서 pop() 한 값을 비교한다. 같지 않으면 push 하고, 같다면 리턴하여 무시하자. function solution(board, moves) { var answer = 0; ..
-
[프로그래머스] JS 키패드 누르기알고리즘/프로그래머스 2022. 4. 12. 23:32
문제 이해하기 키패드를 누른 엄지손가락이 왼손인지 오른손인지를 나타내야한다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락(Left)을 사용. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락(Right)을 사용. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락(Left, Right)을 사용. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다. 데이터 추상화 *, 0, # 을 10, 12, 13으로 추상화 함 각 번호 별로 어떤 손으로 ..
-
[프로그래머스] 위클리 10주차 - 교점에 별 만들기(JS)알고리즘/프로그래머스 2021. 10. 14. 17:54
문제 이해하기 Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다. 예를 들어, 다음과 같은 직선 5개를 2x - y + 4 = 0 -2x - y + 4 = 0 -y + 1 = 0 5x - 8y - 12 = 0 5x + 8y + 12 = 0 좌표 평면 위에 그리면, 교점이 생기는데 정수로 표현되는 교점에 별을 그리면 아래 그림과 같다. 위 그림을 문자열로 나타낼 때. 별이 그려진 부분은 `*`, 빈공간은 `.`으로 표현하면 다음과 같다. 데이터 추상화 주어진 데이터 선분들의 교점을 구한다음 교점은 * 로 빈공간은 . 으로 그려야 한다. 교점을 그리기 위해서 좌표 평면을 추상화해야 한다. 좌표 평면에는 x축, y축 모두 음수의 값이..
-
[프로그래머스] 타겟 넘버 (JS)알고리즘/프로그래머스 2021. 10. 10. 21:47
문제 이해하기 n개의 음이 아닌 정수를 적절히 더하거나 빼서 타겟 넘버를 만들어야 한다. 예를 들어 [1,1,1,1,1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있다. 데이터 추상화 nunber 값이 배열로 들어온다. 배열들을 조합하여 원하는 결과를 낼 수 있기에 따로 추상화할 영역은 보이지 않는다. 알고리즘 적절히 더하거나 빼서 타겟 넘버를 만들어야 한다. 즉 더하기 빼기만 할 수 있다, 모든 경우의 수를 다 해보자. 즉 재귀 함수를 호출하여 타깃 넘버를 만들어 보자 const cal = (value, depth) => { // 기저 사례 - 재귀함수는 배열의 길이가 되면 나온다 if(depth === numbers.length){ if( target === value){ answer++; } ..
-
[프로그래머스] 위클리 9주차 - 전력망을 둘로 나누기(JS)알고리즘/프로그래머스 2021. 10. 9. 21:58
문제 이해하기 n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있다. 전선들 중 하나를 끊어서 네트워크를 2개로 분할하려고 한다. 분할된 두 전력망이 갖게 되는 송전탑의 개수를 구해야 한다. 데이터 추상화 n개의 송전 탑이 전선을 통해 하나의 트리 형태로 연결되어 있다고 알려주고있다. 전선 정보가 2차원 배열로 [ 송전탑, 송전탑] 형식으로 전달된다. 예를 들어 [[1,2], [2,3], [3,4]]인 전선 정보가 들어온다면 다음과 같은 모양을 가질 것이다. 위 그림과 같은 그래프를 추상화해보자. 2차원 배열의 행을 송전탑 1, 열을 송전탑 2로 생각해보자. 그리고 연결되어 있다면 1이라는 값을 할당하자. 0 1 2 3 4 0 0 0 0 0 0 1 0 0 1 0 0 2 0 1 0 1 0 3 0 ..
-
[프로그래머스] 위클리 2주차 - 상호평가(JS)알고리즘/프로그래머스 2021. 10. 4. 20:06
문제 이해하기 당신은 각 학생들이 받은 점수의 평균을 구하여, 기준에 따라 학점을 부여하려고 합니다. 만약, 학생들이 자기 자신을 평가한 점수가 유일한 최고점 또는 유일한 최저점이라면 그 점수는 제외하고 평균을 구합니다. 데이터 추상화 인풋 데이터는 각 학생이 평가한 결과 배열을 받는다. 정리하면 행은 학생이 다른 학생을 평가한 값이며, 열은 다른 학생이 평가한 값이다. 우리는 학생들로 부터 평가받은 값을 사용해야 한다. 즉 열의 값을 순회해야 한다. 열의 값을 순회하여 계산하기란 쉽지 않다. 각 학생들의 받은 값이 행으로 올 수 있도록 행과 열을 바꿔주자. 행 과열을 바꾸는 알고리즘은 ( https://workshop-code.tistory.com/54?category=747867 )에서 확인이 가능하..
-
[프로그래머스] 위클리 1주차 - 부족한 금액 계산하기(JS)알고리즘/프로그래머스 2021. 9. 30. 13:48
문제 이해하기 제공되는 데이터는 이용료, 현재 금액, 놀이기구 타고싶은 횟수를 가지고 원하는 만큼 놀이기구를 탈때 금액이 얼마가 모자르는지 출력해야한다. 놀이기구는 N번째 이용한다면, 원래 이용료의 N배를 받기로 한다. (처음 100 -> 200 -> 300) 데이터 추상화 인풋 데이터는 이용료, 현재 금액, 타고 싶은 횟수로 정수로 제공 된다. 아웃풋 즉 결과는 모자른 금액을 제공 하므로 정수를 리턴하면 된다. 알고리즘 일반적인 풀이 놀이기구를 N번 이용하고, 이용료가 P라면 식은 다음과 같다 - P * N + P * ( N - 1 ) + ... + P * ( N - N) - 이용료에서 N을 곱한 값부터, N이 0이 될때까지 더해준다 . - 이후 현재 금액을 뺀 나머지 값이 결과 값이다. functio..