전체 글

끄적끄적
Computer-이론/Algorithm

컴퓨터 안의 실수 - 1(with. IEEE 754)(2021.07.02)

목차 정말 실수를 많이 유발하는 실수 실수(mistake)가 아니라 실수(real number)에 대한 글. 이 실수는 정말 계산하기가 화가 난다. 밑의 예를 보자. void check_real(int n){ double answer = n*(1.0/n); if(answer != 1) printf("not the same number!!\n"); } int main(){ for(int i = 1; i < 100; i++) check_real(i); } 간단한 x * (1 / x)가 1인지에 대한 함수이다. 수학적으로 당연히 저 printf문은 실행되서는 안된다. 하지만 이 코드를 실행시키면, 어째서인지 한 두개의 printf문이 실행된다. 이런 경우 때문에 실수(real number) 연산은 예외를 적용..

Computer-이론/Algorithm

산술 오버플로(2021.06.21)

목차 산술 오버플로 산술 오버플로는 코딩을 하면서 정말 흔하게 접할 수 있는 오류이다. (특히 C++, C에서 말이다. JAVA는 내가 안써봤고. 나머지 언어에서는 경험을 해본적이 없다.) 왜 산술 오버플로라는 오류는 흔하게 발생할까? 첫째로, 프로그램 언어는 따로 오버플로를 경고하지 않는다. 둘째로, 알고리즘을 확인하는 과정에서 논리에 집중하다 보면, 산술 오버플로를 신경쓰지 못하고 지나칠 수 있다. 그럼 산술오버플로의 사례를 살펴보자. 산술 오버플로의 사례 너무 큰 결과 C, C++, JAVA등 숫자 자료형이 크기가 제한 되어 있는 경우, 어떤 문제를 푼 결과값이 자료형의 한계를 넘어설 때 이 오류가 발생한다. 흔히 32비트 자료형을 습관적으로 사용하다가, 결과가 32비트 자료형을 넘는것을 인식하지 ..

Computer-이론/Algorithm

자주 하는 실수들(2021.06.17)

목차 코딩하면서 자주 하는 실수들. 코딩을 하다보면 정말 정말 정말 많은 실수가 생긴다. 이런 실수들을 조금이나마 줄이고, 발생했을 때도 빨리 알아차리면 좋겠다. 배열 index 접근 오류 정말 코딩하면서 제일 많이 발생하는 오류가 아닐까 싶다. 접근하려는 인덱스가 존재하지 않아서, 멈추고, 오류가 발생한다. 오류가 발생하면 괜찮지만, int arr[10]; int arr2[10]; 정말 만의 하나의 경우로 이 배열 두개의 메모리가 이어진 상태로 만들어져서 오류가 발생하지 않으면 정말 큰일이다. 오류인지도 모르고 작성하다가, 한참 뒤에 뭐가 문젠지 하나하나 찾아가야한다. 정말 화가 나는 경우다. 이 실수, 오류를 막는 법! 대공개!! 바로 이걸 안나게 코드를 짜면 된다. 뭐 우쩌겠나. 배열에 접근할 때 ..

Computer-이론/Algorithm

코딩의 중요성(2021.06.16)

목차 코딩은 언제나 문제해결전략, 자료구조, 알고리즘등은 어떤 문제에서 쓰인다. 하지만 코딩은 언제나 쓰인다. 문제해결전략을 이용해서 해결하고 검증까지 했는데. 막상 코딩을 구현을 못한다면 아무런 의미가 없는 행동들이 된다. 이 코딩은 무얼해도 우리에겐 사실 제일 중요한 것이다. 언제나 읽기 쉽게, 짧게 알고리즘을 구현하고, 코딩을 하다보면 오류가 분명 나타난다. 그래서 디버깅을 하려고 보니, 간단한 기능임에도 코드가 1000줄이 넘어가고 변수와 함수, 클래스명을 제대로 알아볼수조차 없다면. 디버깅을 하는 내내 고통스럽고, 끝내 고치지 못해 다시 새로짜거나, 문제해결이 실패 해버릴수도 있다. 그래서 우린 항상 코드를 짧고, 간결하게, 읽기 쉽게 짜야한다. 나뿐만이 아니라, 협업을 하는 사람도 보기 쉽게 ..

Computer-이론/Algorithm

문제 해결 전략(2021.06.13)

목차 문제를 해결하는 방법은 두가지가 있다. 직관 체계적 접근 직관은 그 말대로 문제를 보고 바로 어떻게 풀어야 할지 예상이 가는것이다. 물론 당연히 이건 쉽지 않다. 사실 이게 된다면 이렇게 포스트를 쓰고 있지 않을거니까. 체계적 접근은 여러가지 방법을 통해 하나하나 문제를 해결해나가는 것이다. 이 포스트를 쓰고있는 이유 중 큰 비중을 차지한다고 생각하는 것. 하나하나 전략들을 소개해보겠다. 체계적 접근 비슷한 문제를 해결한 적이 있나? 예전에 비슷한 문제를 해결 한 적이 있다면, 그 문제를 참고해서 문제를 해결해 나가면 될 것이다. 하지만, 비슷한 문제를 해결해 봤다고 그 문제가 같은 건 아니다. 비슷하다고 생각해도 아예 다른 방식의 해결방법이 존재 할 수도 있다. 그러니 문제를 제대로 분류하고, 어..

Computer-이론/Algorithm

C/C++을 사용하면서(2021.05.15)

목차 C/C++이지만 C++을 중점으로 설명한다. C로도 풀려면 풀 수 있는 문제가 많지만, 너무 불편하고 정말 그 개념조차 모를때 말고는 C++을 써서 푸는게 좋다고 생각한다. 실제 프로그램을 만드는것이 아니라, 문제풀이에 있어서 필요하다고 생각되는 것들이다. STL(STandard Library) 활용하기. C++에는 다양한 STL이 있다. vector, queue, stack… 등 많은 STL이 이미 만들어져있다. 이 각각의 자료구조, 알고리즘을 아예 몰라서 공부하는 목적이 아니다! 그렇다면 STL을 잘 활용하는것도 중요하다. 일일이 하나하나 구현하면 시간도 오래걸릴 뿐만 아니라, 혹시 어딘가 잘못 구현한다면 그걸 찾느라 하나하나 뒤져봐야 할 수도 있다. 또 직접구현한 코드가 비효율적이라면, 맞는 ..

Computer-이론/Algorithm

문제 해결 과정(2021.05.14)

목차 내 문제 해결 과정의 문제 이때까지 나는 어떤 문제를 만나면, 무작정 풀기만 했다. 정말 문제 푸는 방식이라는게 있을까 싶을 정도였다. 제대로 된 알고리즘 공부법도 몰랐고, 어떻게 하는지도 몰랐다. 그저 백준의 문제를 푸는게 재밌어서, 이렇게 해보면 어떨까 저렇게 해보면 어떨까 하면서 즉흥적으로 풀어왔다. 이게 필요하면 그때 이걸 공부하고, 저게 필요하면 그때 저걸 공부하고. 풀면서도 이건 너무 기초가 안되는거 아닐까.. 싶기도 했지만, 문제 푸는것 자체가 너무 재밌었다. 근데 이제 한계가 왔다. 더 이상은 즉흥적으로 문제가 풀리지 않는다. 내가 쌓아온건 얼마 되질 않았고, 그마저도 불안한 상태였다. 그러니 제대로 문제가 풀릴리가.. 그렇게 문제를 어떻게 해결해 갈 것인가. 가장 기본적인 틀부터 차..

Computer-이론/Algorithm

이제야 시작하는 알고리즘(2021.04.15)

목차 이제서야 시작하는 알고리즘 뭔가 이때까지 해온거랑 순서가 많이 바뀐거 같긴하다. 백준 풀다가 이제서야 알고리즘 포스팅이라니.. 풀다보니, 너무 정리가 안되있고 뭔가 안되는 느낌이라 한번 스윽 정리를 하고 가려고 한다. 알고리즘 포스트는 대부분 C/C++로 진행이 될거지만, 아주 가아끔 Python이 등장할 때도 있다. 목차(공부를 하면서 업데이트 해 나갈 것!) 문제를 해결함에 있어 필요한 과정 C/C++로 하는 만큼 C/C++에서 꼭 내가 써야한다고 생각되는 것들 문제해결전략 열심이 열심이 공부해서.. 대회도 나가서 상타보고 싶다.. 김종만의 '프로그래밍 대회에서 배우는 알고리즘 문제해결 전략'을 참고했습니다.

시유후
시유후의 개발일기