1.기존의 명령은 명령4자리와 주소4자리의 8자리 숫자로 구성되었지만 
사람이 직접 0과 1로 명령을 내리기 복잡해졌고 이를 위해서 어셈블리가 추가되었다.

어셈블리는 중간에서 사람이 문자로 명령을 내릴 경우 
해당 명령어를 이진 코드로 변경시켜주고
다시 기계는 이진 코드로 된 명령을 수행하는 방식이다.


2.재미있게도 문제가 벌레 때문에 기계 작동이 멈춰서 고장을 버그라고 불렀던 것 처럼 
예전에는 천공카드로 데이터를 관리했는데 천공 카드의 구멍을 잘못 뚫거나 변경이 필요할 경우
종이 패치를 덧대어 구멍을 막아 진행하던 것으로 
우리가 패치했다라고 할 때의 패치는 여기서 시작되었다.


3.앨런 튜링의 튜링 머신은 단순히 계산 가능한 모든 것을 계산할 수 있다는 증명을 통해
계산 기계의 시초같은 존재가 되었으며 우리가 사용하는 핸드폰, 전자레인지, 컴퓨터 등
거의 모든 기계에서 사용되는 이론같은 것 이라고 한다.


4.의식하지 못하고 사용하고 있었지만 주석이 주석으로서 작동할 수 있는 원리는
해당 기호가(언어마다 다를 수 있음) 컴파일 될 때 프로그램이 무시하게 표기된 문장이기 때문이었다.

그렇기 때문에 /*와 같은 시작이 들어갈 경우 문장의 마지막까지 주석처럼 초록색으로 변해버리고
*/로 주석 종료를 알려야만 나머지 코드들이 정상적으로 실행된다.



 


(1).백준 2630 색종이 만들기는 재귀를 사용해 해결할 수 있는 문제였다.
재귀로 현재 영역이 전부 0이거나 1이 아닌 경우 4등분을 하게 만들었고
다시 각각의 4등분을 체크하는 방식으로 진행했으며
전부 1일 경우 one++, 전부 0인 경우 zero++로 1과 0의 갯수를 구했다.
마지막 1칸일 경우 반드시 1 또는 0만 남기 때문에 엣지케이스 문제 없이 잘 통과될 수 있었다.

let arr = `8
1 1 0 0 0 0 1 1
1 1 0 0 0 0 1 1
0 0 0 0 1 1 0 0
0 0 0 0 1 1 0 0
1 0 0 0 1 1 1 1
0 1 0 0 1 1 1 1
0 0 1 1 1 1 1 1
0 0 1 1 1 1 1 1`.split('\n').slice(1)

let zero = 0
let one = 0

for(let i = 0 ; i < arr.length ; i++){
    arr[i] = arr[i].split(' ').map(Number)
}

function add(a,b,n) {
    let result = 0
    for(let i = a ; i < a+n ; i++){
        for(let j = b ; j < b+n ; j++){
        result += arr[i][j]
        }
    }
    return result
}

function cal(a,b,n) {
    if(n<1){
        return
    }
    if(add(a,b,n) === n*n){
        one += 1
        return
    }
    else if(add(a,b,n) === 0){
        zero += 1
        return
    }
    else{
        cal(a,b,n/2)
        cal(a+n/2,b,n/2)
        cal(a,b+n/2,n/2)
        cal(a+n/2,b+n/2,n/2)
    }
}
cal(0,0,arr.length)

console.log(zero)
console.log(one)

'회고' 카테고리의 다른 글

[취업준비일지] - 133  (0) 2023.03.02
[취업준비일지] - 132  (0) 2023.03.01
[취업준비일지] - 130  (0) 2023.02.27
[취업준비일지] - 129  (0) 2023.02.26
[취업준비일지] - 128  (0) 2023.02.25

+ Recent posts