반응형

JS 알고리즘 문제풀이/섹션 2. 1, 2차원 배열 탐색 7

7.봉우리

📌강의 정리 봉우리가 되려면 12,3,6,9시가 다 나보다 낮아야 한다. 여기서 중요한점은 격자의 가장자리는 0으로 나보다 작다고 생각해야한다. 구석에 있다면 바깥쪽은 볼필요가 없다. 4방향 탐색에서 if문을 남발하지말자 1행 2열 인 '1'이 있다. dx와 dy의 배열을 새로 만들어야 한다. dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] 을 하면 이 배열을 더해주고 빼면서 봉우리를 찾는 코드를 짤 수 있다. 이중 포문을 만들고 거기다 k로 k

6.격자판 최대합

📌강의 정리 행번호와 열번호를 생각한다. arr[행][열] 이다. Number.MIN_SAFE_INTEGER를 하면 최소값을 넣을 수 있다. 이중포문으로 행탐색 열탐색을 할수가 있다. 이제 sum1+=arr[i][j], sum2+=arr[j][i]를 하면 행의 총합, 열의 총합을 구할 수 있다. 처음 포문이 시작될때 섬1,섬2를 0으로 초기화하는 코드를 넣어주고 두번째 포문이 하나 끝날때마다 Math.max(answer, sum1, sum2)를 통해 answer에 최대값을 넣어준다. 그 다음 대각선을 계산하기위해 다시 포문을 이용한다. 이때 포문은 하나만 사용해도된다. arr[i][i]는 오른쪽 아래로 가는 대각선이다. 또한 왼쪽 아래로 대각선은 arr[i][n-i-1]을 하면 구현가능하다. 격자무늬에 ..

5.등수구하기

📌강의 정리 단순히 등수를 측정하는 것에서 이제 중복등수를 계산해야한다. 이중 포문을 돌리는데 먼저 앤서배열에 1로 다 값을 준다. i를 주인공으로 자기보다 큰 점수가 있으면 자기 등수를 ++한다. 처음에 배열에 값을 다 1로 주고 그 앤서배열을 비교하며 카운트하면 중복값을 쉽게 처리할 수 있다. 배열을 다 1로 초기화 하기 위해서 Array.from을 써야한다. Array.from({length:n}, ()⇒1); n은 배열의 길이이고 ()은 콜백함수이다. 이중 포문을 돌리면서 i보다 j가 크면 앤서값을 ++하면 끝이다. 📌느낀점 정말 알고리즘의 세계는 아는 것이 힘이고 머리가 나쁘면 코드가 고생하는게 맞다. 알고나면 쉬운데 왜 그 생각을 못했는지 모르겠다. 이 문제는 풀긴했지만 전혀다른 풀이였는데 강..

4.점수계산

📌강의 정리 문제가 길다고 겁먹지말자 1이 들어오면 cnt를 ++하면 된다. 그리고 이것을 answer에다가 누적하면된다. 그러다 0을 만나면 cnt를 0으로 초기화하면된다. 이렇게 계속 누적되면 answer가 답이 된다. 포문 돌릴때 x of arr 쓸 수 있다면 쓰는게 편리하고 좋다. 📌느낀점 푸는 방법도 코드도 다 강사님과 내가 같았다. 문제는 길었지만 쉬웠다. 번뜩이는 아이디어가 중요하다. 코드에서 문제가 읽히게 하자. //나의 코드 //강사님 코드

3.가위바위보

📌강의 정리 가위바위보 정보가 숫자로 들어온다. a배열 b배열로 받았다. 두 배열의 길이는 같기에 a.length를 써서 포문돌리면 다 돈다. 승부결과는 a입장에서만 보면 이길 수 있는 경우는 3가지이다. 1,2,3으로 이기는 경우이다. a가 1을 내면 && b가 3을 내야한다. 마찬가지로 2,3을 간다. 그리고 else는 b가 이기는 경우 앞서 같은경우는 비기는 경우로 한다. 📌느낀점 나는 a가 이기는 경우와 b가 이기는 경우를 코딩하고 else로 비기는경우를 했는데 그러지말고 비기는경우 a가 이기는 경우하고 b가 이기는 거는 else로 하는게 더 유리한것같다. 그리고 이렇게 해서 코드를 절약하면 하드코딩으로 1,2,3 다 한줄씩 지정해준다. 나의 방식이던 둘을 뻈을때 1 && 3,1은 의미가 확장되면..

2.보이는 학생

📌강의 정리 앞에 사람보다 크면 보이고, 작거나 같으면 안보인다. 배열만 솔루션으로 받으면 된다. i를 정해서 i가 앞에보다 크면 count하면 되는데 이걸 이중포문 쓰면 시간 복잡도가 O(N^2)가 된다. 그러므로 포문 하나만 써야한다. max값을 i일때 i앞에서의 제일 큰사람으로 정한다. max값은 새롭게 보일때마다 카운팅해주면서 다시 정해주면 된다. 처음은 무조건 보이니까 카운트 1로 시작하고 max값은 arr[0]으로 시작한다. 반복문도 1부터 시작한다. 📌느낀점 나와 다른점은 처음에 카운팅을 하나해주고 max값을 arr[0]으로 시작한다는 점이다. 그래서 반복문이 1부터 시작하는데 아직은 나와 강사님 중 어떤게 더 효율적인지 시간복잡도를 잘 몰라서 모르겠다. 나중에 시간복잡도를 알아봐야 한다. ..

1.큰 수 출력하기

📌강의 정리 1차원 배열을 탐색하는 문제이다. 배열을 리턴으로 받으니까 우선 앤서를 배열로한다. 첫번째 숫자는 무조건 받으니까 우선 푸쉬로 받는다. 우리는 입력값에서 배열만 넘기는 거로 한다. 이후 for문을 돌려 배열을 하나씩 탐색하는데 이때 if문으로 앞뒤 하나씩비교하여 크면 출력하면 된다. 📌느낀점 내가 푼 풀이방식이랑 똑같다. 쉽다. //나의 코드 //강사님 코드

반응형