Algorithm
function solution(n, left, right) {
let answer = [];
let start = [Math.floor(left/n)+1,left%n]
let end = [Math.floor(right/n)+1,right%n]
for(let i=start[0];i<=end[0];i++) {
let idx =1;
if(i===start[0]) idx = start[1]+1
if(i===end[0]) n = end[1]+1
for(let j=idx;j<=n;j++) {
let num = i>=j?i:j
answer.push(num)
}
}
return answer;
}
처음엔 이차원 배열로 풀어보고 별걸 다 해봤는데 시간도 너무 오래걸리고 메모리를 많이 써서 접근법이 잘못 됐나 싶었다.
그래서 보니 각 좌표별로 보면 좌표의 x,y값중 큰 값으로 배치되는 규칙이 있어 적용하여 해결했다.
몫과 나머지를 사용해서 인덱스 시작 위치와 끝 위치를 구하고 그 사이만 구할 수 있도록 한다
다른사람풀이
function solution(n, left, right) {
var answer = [];
for (let i = left; i <= right; i++) {
answer.push(Math.max(i % n, parseInt(i / n)) + 1)
}
return answer;
}
시작점과 끝점을 각각 left
와 right
로 잡고 정답 배열에 집어 넣는데
i번째 index를 n으로 나눈 나머지와 i/n으로 나눈 정수값의 +1
좌표값을 계산하는 건 똑같았지만 풀어낸 과정이 달랐다.. 각 위치의 값들은 계속 저런식으로 나눈 값과 나머지값들을 활용해 만들 수 있었는데 너무 복잡하게 생각했던 것 같다.
좀 더 효율적으로 할 수 있게 다양한 방법으로 시도해보자 아쉬운 점이다.
CS
그전에 MPA와SPA부터 보고 가자
SPA 싱글 페이지 애플리케이션으로
싱글 페이지 즉, 하나의 페이지로 이루어진 홈페이지!
하나의 페이지로만 구성되어 있어 CSR에 적합하다
데이터를 수정, 조회할 때 동적으로 페이지를 구성하여 페이지가 새로고침 되지 않고 다른페이지로 넘어가지 앟는다
Vue,Angular,React 프레임워크로 만든 홈페이지들이 대부분 여기 속한다
하지만 모든 SPA가 CSR을 사용하는 것은 아니고 PHP나 JAVA로 정적인 페이지 하나만 구성된 홈페이지라면 그것 또한 SPA이다
MPA 멀티페이지 애플리케이션으로
여러 개의 페이지로 이루어진 홈페이지!
PHP나 JAVA가 여기에 속한다.
여러 개의 페이지로 구성되어 있으므로 보통 클라이언트에서 서버에 요청을 보내면 서버에서 렌더링하고 클라이언트에게 응답을 주는 방식인 SSR환경을 사용한다
SPA와 반대로 새로고침이 발생
CSR은 클라이언트 사이드 렌더링이라는 뜻으로 구동 방식은 초기 로드 시 빈 HTML과 모든 로직이 담겨있는 JS를 다운로드 한다.
그 후 빈 HTML에 JS를 이용하여 DOM을 동적으로 생성하여 그려내게 되는데 이렇게 클라이언트에서 렌더링한다고 하여 클라이언트 사이드 렌더링이라고 부른다
SPA에 적합한 환경!
장점
단점
SSR은 서버 사이드 렌더링이라는 뜻으로 구동 방식은 서버에서 렌더링하여 완성된 HTML파일을 로드해 준다.
클라이언트에서 요청할 때마다 각 상황에 맞는 HTML 파일을 념겨주기 때문에 페이지가 여러 가지일 수밖에 없다. MPA구동 방식과 밀접한 관계가 있다
장점
최근 NUXT나 NEXT 등으로 SSR과 CSR을 혼합해서 사용할 수 있다.