본문 바로가기
실천하기/코딩테스트

[220104] 코테 Lv.1 / 행렬의 덧셈

by 한코코 2022. 1. 4.


 

 

문제인식 (더보기)

더보기
더보기
더보기

[[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번째 코드부터 예상값과 다르다.
 

이상하다. 예상대로라면 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))

댓글