문제인식 (더보기)
더보기
더보기
더보기
[[1,2],[2,3]] 이건뭐지
배열이 두겹이다. 뭐지 저건 뭐라고 부르지. 더블배열은 아닐테고.
구글링하니까 2차배열이라고 부른단다.
배열 선언 방법 : let arr = new Array(rows);
새로운 배열 선언 방법을 알았다. 변수명에 새로 생성하니까 new, 배열이니까 Array, 만들 개수를 (rows)에 넣는가 봄.
객체 안에 배열이나 객체를 넣을 수 있는데, 배열 안에도 배열을 넣을 수 있나보다!
let arr = [1,2,3]
arr[0]=1
2차원 배열 선언 방법 : let arr = new Array(rows, columns);
우선 이해를 해보자.
- [ [1,2], [2,3] ] 이란 배열 안에는 [1,2]랑 [2,3]이 있다.
- 저 배열 이름이 arr이라고 치면, 배열은 0부터 순서대로 번호가 붙는다.
- 그러면 arr 주소 0번에 [1,2]과 주소 1번에 [2,3]이 있다.
- arr의 주소 0번 = arr[0] = [1, 2]
- arr의 주소 1번 = arr[1] = [2, 3]
- 근데 배열도 주소가 있잖아? arr[0] 안에 있는 1이랑 2는 각각 땨로니까
- arr의 주소 0번의 주소 0번 = arr[0,0] = 1
- arr의 주소 0번의 주소 1번 = arr[0,1] = 2
- 이거 아파트 동호수 아닌가. 100동의 100호, 101호, 102호 이거처럼?
자 그러면 확인해보자
let arr1 = [[1,2],[4,5],[3,3]];
//예상대로라면
console.log(arr1); //[1,2],[4,5],[3,3]
console.log(arr1[0]); //[1,2]
console.log(arr1[2]); //[3,3]
console.log(arr1[0,0]) //1
console.log(arr1[0,1]) //1
이상하다. 예상대로라면 4번째 코드가 1이 나와야하는데 뜬금없이 [1, 2]가 나왔다. 길이도 2라고 뜨면 틀림없이 배열이란 소린데. 호출을 다르게 했는데 왜 같은 값이 나오지.
뭐여.. 이렇게 된 이상 덧셈도 가능한가 해본다.
console.log(arr1[0]+arr1[2]); //[1,2]+[3,3]
console.log(arr1[0,1]+arr1[2,1]); //2+3
arr1[0]이랑 arr[0,0]이 같은 배열인걸 확인했다. 괴상하게 숫자로 만들어진 문자열을 더한것처럼 나왔다. 이건 배열을 제대로 수업진도가 나갈때까지 보류.
[220106] 기나긴 삽질
- 요약
- 2차원 배열을 아직 이해를 못해서 1차원 배열로 해결해보려고 했지만. 망함.
- 원인
- 계산을 하려고 배열을 number로 풀었고, 나중에 concat을 통해 합치려고했으나 concat을 쓰려면 array가 되어야함. 다시 number을 arryay로 돌리고 하기엔 너무 먼 길이 보임.
- 교수님 : 2차원 배열로 풀라고한걸 왜 1차 배열로 풀고있어. 문제의 의도를 알아서 풀어야지.
- 반성
- 문제의 의도를 파악해서 풀자.
기나긴 삽질은 일단 코드에 담아놓겠음 (더보기)
더보기
더보기
더보기
let arr1=[[1,2],[2,3]]
let arr2=[[3,4],[5,6]]
let newArr1=[]
let newArr2=[]
//자 2차원 함수를 배우지 않았다고 친 상태에서의 풀이
for(let i=0; i<arr1.length; i++){
let temp1=arr1[i];
let temp2=arr2[i];
for(let j=0; j<temp1.length; j++){
newArr1.push(temp1[j]);
newArr2.push(temp2[j]);
}
}
//덧셈해서 배열 만들기
//temp3 = [4,6,7,9]
let temp3=[]
for(let i=0; i<newArr1.length; i++){
temp3.push(newArr1[i]+newArr2[i])
}
//세로랑 가로가 같은 개수라고 하니까 i*i개로 나눠야지
//2개면 0,1/2,3
//3개면 0,1,2/3,4,5/6,7,8
//4개면
//0,1,2,3 ----> (0번째 * 4개) ~ ((1*i)-1)
//4,5,6,7 ----> (1번째 * 4개) ~ ((2*i)-1)
//8,9,10,11 --> (2번째 * 4개) ~ ((3*i)-1)
//12,13,14,15-> (3번째 * 4개) ~ ((3*i)-1)
//i번째 j개 --> (i번째 * j개) ~ ((i번째*j개)-1)
//2배열을 새로운 배열에 합쳐주는 concat
// let a = [1,2,3]
// let b=['ab','b']
// let c=[]
// c[0]=a.concat(b)
// c[1]=[3,4,5]
// c[2]=c[0].concat(c[1])
// c[1]=c[0].concat(c[2])// 얘도 되는데...?
// c[4]
//큰 박스 몇개
//[4,6,7,9] 예시
let answer=[]
let temp4=[]
let len = arr1.length;
//j개
//arr1=[[1,2],[2,3]] --> 2개
for(let i=0; i<len; i++){ // 0 1
//작은박스 몇개
//j는 temp 끝까지 돌리게 하는 요소
for(let j=(i*len); j<((i+1)*len); j++){
// temp4[i]=temp3[j].concat(temp3[j+1])
//Uncaught TypeError: temp3[j].concat is not a function --> 태그id나 name이 자바스크립트 함수명과 동일하거나 오류가 발생하는 코드가 존대
//뭐왜뭐 temp3[]도 원소 잘 뜨고 concat도 원래 있는 함순데 너는 왜 안되는디
//질문으로 넘기자ㅇ>-<
--> concat은 배열에서만 돌아갑니다. 니가 가진전 number에요. 긴가민가하면 typeof를 돌려볼것
}
}
[220107] 2차배열, push로 풀기
let arr1 = [[1], [2]];
let arr2 = [[3], [4]];
function solution(arr1, arr2){
//
let answer=[];
for(let i=0; i<arr1.length; i++){
//각 요소를 더한 값을 더할 배열 -> push 사용하려면 배열이여야함
let temp=[];
for(let j=0; j<arr1[i].length; j++){
//2차원 배열의 각 요소를 꺼내서 더함
temp.push(arr1[i][j]+arr2[i][j]);
}
//더한 값을 넣을 배열을 넣을 배열
answer.push(temp)
}
return answer;
}
console.log(solution(arr1, arr2))
[220109] for문 만으로 풀기
아니 되네?? answer[i][j]=arr1[i][j]+arr2[i][j] 형태로 왜 안되는지 짜증내다가 갑자기 풀림.
let arr1=[[1,2], [3,4]]
let arr2=[[5,6], [7,8]]
let answer=[]
//이렇게 2차원배열을 만들면 for문 속 단순연산을 넣을 수 있다
for(let i=0; i<arr1.length; i++){
answer.push([])
}
function solution(arr1, arr2){
for(let i=0; i<arr1.length; i++){
for(let j=0; j<arr1[i].length; j++){
//for문 단순연산
answer[i][j]=arr1[i][j]+arr2[i][j]
}
}
return answer;
}
console.log(solution(arr1, arr2))
'실천하기 > 코딩테스트' 카테고리의 다른 글
[220108] Lv.1 / 하샤드의 수 (0) | 2022.01.08 |
---|---|
[220107] Lv.1 / 핸드폰 번호 가리기 (0) | 2022.01.07 |
[220105] Lv.2 피보나치 수열 / 메모이제이션으로 풀기 (0) | 2022.01.05 |
[220104] 코테 Lv.1 / x만큼 간격이 있는 n개의 숫자 (0) | 2022.01.04 |
[220104] 코테 Lv.1 / 직사각형 별찍기, 크롬 콘솔에서 중복된 값 띄우기 (0) | 2022.01.04 |
댓글