[리뷰] 프로그래머, 수학으로 생각하라

jinvicky (남궁진)·2024년 9월 16일

Book-Review

목록 보기
3/4

Intro


난 수학 진도조차 학창시절에 따라가 본 적이 없다.
하지만 요즘 짜는 내 코드들을 보면 규칙이고 나발이고 주먹구구식일 뿐이다.
원인에 대해서 여러 고민을 해봤는데,
이쪽, 수학과 개발에 대해서 머리에 든 게 없어서가 가장 크지 않을까.
그래서 디스코드서 추천 책들 하나씩 인터넷 검색해보면서 읽어보려 한다. 이 책은 1번째 책이다.

Reason


내가 수학을 못한다고 갑자기 수학 교과서를 펼치기엔 시간이 없어서 프로그래밍과 연관지어 설명해줄 책이지 않을까 하는 기대 속에 읽었다.
내가 이해한 대로 적은 책임을 밝힌다.

TIL


ch01 - 0이야기

2진과 10진부터 시작해서 로마자 표기를 설명하면서 큰 수 표기를 어떻게 다룰 것인지 나온다.

이진수로 길게 가는 것보다 십진수가 더 가독성 좋지 않나.

지수 개념에서 0은 10의 자리가 없다는 것을 나타내는데, 0을 그렇다고 생략해서는 안된다.

0은 자리를 확보하는 것이다. 이를 플레이스홀더라고 함.

  • 일정이 없다는 일정
    (0으로 설정해 일정이 없을 예정이라는 표시를 한다.)
  • 약효가 없는 약
    (n일마다 약을 먹지 않는다고 할 때 약을 안 먹지 말고 효과가 없는 약을 셋팅해둔다.)

결국 큰 문제를 작은 문제로 덩어리 나누어 해결하려는 노력을 로마, 이집트 등의 표기법에서 알 수 있다.

ch02 - 논리

케이스를 다룰 때 누락되거나 중복되는 부분이 있어서는 안된다.
이를 어떻게 잘 true, false로 분기 처리할 수 있을가?

옳은가 옳지 않은가를 판단할 수 있는 문장을 명제라고 한다.

  • 수직선, 진리표, 벤다이어그램을 사용 가능

드모르간의 법칙 : A가 아니다 또는 B가 아니다는 A명서 B가 아닌 것과 같다.

카르노 맵을 사용해서 색깔 램프를 켤 지 여부를 계산하는 부분이 어렵고 흥미로웠음.
if문으로 장황하게 나는 표현했는데 정답은 그냥 얘 키고, 얘는 A일때만 꺼줘~ 였다.

https://m.blog.naver.com/leeyunghuk1/220958708825

복잡한 규칙이 있다(현실) -> 변형해서 단순화 한다.(논리)
-> 단순화 한 논리식을 단순한 규칙으로 사용한다(현실)

현실에서 어려우면 논리의 세계로 들고 가서 이리저리 정리해서 다시 현실에 적용하는 것이다.
if는 성립과 미성립 세계 2개로 나뉘는 것이다.

ch03 - 나머지

나눗셈은 그룹 나누기와 같다. 나머지에 따라서 어떤 그룹에 속할 것인지가 정해지기 때문이다.

100일 후는 무슨 요일인지 구하려면 100을 7로 나누었을 때 나머지에 대응하는 요일이 된다.
오늘이 일요일이라면 100일 후는 화요일이 된다.

1, 10, 100, 1000일 후의 요일을 구해보면 규칙을 발견할 수 있다. (월수화토목금이다)

우리는 결국 주기성을 발견해야 하는 것이다.

1의 자리를 구하려면?
1의 자리에 영향을 주는 것은 원래 두 숫자의 1의 자리뿐이다. 예를 들어서 지수 987654321을 주기가 4일때 4로 나눈 나머지를 구하면 된다.

오셀로 통신은 패리티 비트와 같은 원리를 지녔다.
돌을 뒤집었나? 여부는 사전에 홀/짝수개의 돌을 뒤집은 상태로 둘 것인가만 서로 정해 놓으면 보지 않아도 홀짝 여부로 뒤집었나 여부를 알 수 있다.

친구 찾기 문제가 있다. 이 문제는 길에 주목하지 않고 도착한 장소에 주목해야 한다.
홀/짝수번으로 도착할 가능성이 있는 마을로 간다.

(결국 주목해야 할 대상을 잘못잡아서 힘들었나..)

나의 경우 정처기 풀 때 비슷한 문제를 봤던 지라,
이걸 어떻게 1000 넘어서까지 계산을 하나~ 좌절했고,
그래서 더 수학이나 규칙을 배워야겠다고 다짐하게 되었다.

문제를 잘 나누기 위해 적절한 분류 방법을 발견해야 한다.
빈틈없이 타일을 깔려면 체스판처럼 일부를 검게 칠해야 하고,
홀수 마을과 짝수 마을로 나누거나

하나하나 확인보다 번뜩이는 아이디어가 필요하다.
(개수 자체, 길 자체가 중요한 게 아니야)

Outro


읽어서 손해볼 책이 아니다.

profile
하나씩 차근차근하게 하자:)

0개의 댓글