-
[프로그래머스] 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 )에서 확인이 가능하..
-
[알고리즘] 배열의 행과 열 바꾸기알고리즘 2021. 10. 4. 19:30
배열의 행과 열 바꾸기 배열을 다루는 여러 가지 방식 중 행과 열 바꾸는 방식에 대해 알아보자. 일반적인 방법 원본이 변경되지 않기 위해 임시 배열을 만든다. 배열을 횡으로 순환하면서 값을 넣어준다. let matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; // 첫번째 방법 반복문을 돌면서 바꿔준다 let ansMatrix = []; // 1. 배열의 행 길이만큼 반복한다 for( let i = 0; i tmp.push(row[i])); // 3. 추출한 값을 저장 ansMatrix.push(tm..
-
[알고리즘] 가우스의 덧셈 공식알고리즘/정수론 2021. 10. 1. 12:37
목표 가우스 덧셈에 대해 알아보자 가우스 덧셈을 이용한 문제 풀이 가우스 덧셈 등장 배경 천재적인 수학자 독일의 가우스는 어려서부터 수학에 재능을 보였다. 가우스가 초등학교 3학년 때 수학 선생님이 1 ~ 100 숫자를 모두 합하면 얼마가 되느냐는 문제를 냈다. 가우스는 시작하지 얼마 되지 않아서 손을 번쩍 들었습니다. 오래 걸릴 줄 알았던 선생님은 가우스에게 정답을 물어봤고, 가우스는 정답을 말씀드렸다. 정답을 맞힌 가우스에게 어떻게 문제를 해결했는지, 풀이해보라고 요청했고, 가우스는 기꺼이 자신이 계산한 방법을 선생님께 말씀드린다. 가우스 덧셈 이란 가우스가 선생님께 가져온 계산법은 이러했다. 첫 숫자 1과 끝 숫자 100을 더하면 101 이 된다 두 번째 숫자 2와 끝 숫자 99를 더하면 101 이..