대학교 M.T나 술자리에서 '베스킨라빈스 31'게임을 많이 해본적이 있는가? 여러명이 둘러 앉은 다음 숫자 1부터 차례대로 1개부터 3개씩 숫자를 말하다가 31을 말하게 되는 사람이 패배하게되는 게임이다. 해당 게임의 필승 전략이 있을까? 2명이서 이 게임을 즐기고 있다고 가정해보자. 31을 말하면 안되므로, 당신이 30을 말하게 된다면 이길 것이다. 그렇다면 30을 말하게 될려면 상대방의 숫자가 27,28,29 도록 말해야 자신이 30을 말할 수 있다. 그러면 27,28,29를 말하게 할려면 어떻게 해야할까? 이런식으로 문제를 풀어 나갈 수 있다. 우리의 최종 목표인 31을 말하지 않기 위해 그 범위를 줄여나가면서 푸는 알고리즘을 부분 정복 알고리즘 (Decrease and Conquer)라고 한다. ..
나는 대한민국 국민이다. 이 나라를 사랑하는 사람을 애국자라고 부른다면 나는 내 기준 아래에서는 애국자이다. 그런데 요근래 애국이라는 개념이 많이 이상해지고 있다. 대한민국 헌법도 제대로 지키지 않은 사람들을 맹목적으로 추종하면서 자신들이 애국자라고 외친다. 1919년 대한민국 임시정부가 수립된 이래, 1945년 8월 15일 일제로부터 36년간의 식민 통치를 끝내고 정부가 수립되어 지금까지 참 많은 일을 겪은 나라다. 대한민국 애국자라면 대한민국이라는 100년 조금 안되는 기간 동안에 무슨일이 있었는지 잘 알고 있어야 하지 않을까? 많은 대한민국 애국자들이 꼭 알아야하는 대한민국의 뒷 역사들을 한번 소개해볼까 한다. 이승만 대통령의 정부 수립, 4.19혁명, 6월 민주항쟁 처럼 교과서에서 들은 뻔한 이야..
숙종은 조선에서 몇 안되는 적장자 임금이다. 그리고 그 중 더 몇 안되게 자신의 재임 기간 내내 권력 마음대로 다 휘두르고 죽은 2명 중 한명이다. 다른 한명은 당연히 연산군. 오랜만에 정통성이 갖춰진 왕이 나오게 되다보니 많은 신하들이 왕이 권력을 맘대로 휘두를까 우려했고, 그 우려는 100% 적중했다. 유럽의 절대 왕권 시기가 있었던 것처럼 조선의 절대 왕권 시기가 있었다면 바로 이 숙종 시기이다.무려 환국만 4번이 일어날 정도로 숙종 시기는 혼란기였다. 예송논쟁까지만 하더라도 붕당정치는 좋은 면도 분명 존재했다. 가끔 많은 신하들이 피를 흘리기도 했지만, 당시는 인권 개념이 약한 조선시대 였다. 특히 성리학 국가인 조선에서 예송논쟁은 국가의 방향성을 논하는 중요한 문제였다. 하지만, 숙종 시기의 환..
나는 자기계발 독서 책을 읽는 것을 그렇게 좋아하지 않는다. 20대 초반에 정말 미친듯이 많이 읽어서 질렸다. 또, 삶이 힘들거나 연애에서 실패했을 때 마음의 위로를 얻고자 그런 책들을 읽었는데 별로 도움이 안됐다. 책을 읽는 그 순간에 잠시 치료가 될 뿐 결국 다시 원점으로 돌아오게 되더라. 타인을 사랑하라, 열정적으로 살아라, 상처 받을 필요 없다 말 하던데 별로 내 성격상 타인에 비위 맞춰주면서 살지도 못하겠고, 상처 안받으면서 살지도 못했다. ‘자기계발’ 책이 정말 ‘자기계발’을 해주지 못한다는 걸 깨달았다. 이번에 읽은 책 ‘대화의 신’도 일종의 자기계발 책이었다. 오랜만에 이 자기계발 책을 산 이유는 올해에는 왠지 낯선 사람과 대화를 많이 하게 되는 한해가 될 것 같은 느낌이 들었다. 그리고 ..
알고리즘은 어려운 문제를 얼마나 빠르고 정확하게 풀 수 있느냐가 중요하다. 그래서 알고리즘이 있다면 해당 알고리즘이 얼마나 빠른지 측정할 수 있는 객관적인 지표가 필요하다. 어느 알고리즘이든 이를 적용할 수 있는 표준적인 방법이 필요할 것이다. 이것이 바로 시간복잡도이다. 1. 시간 복잡도 알고리즘의 실행 시간은 컴퓨터의 성능, 사용한 프로그래밍 언어, 컴파일러의 종류에 따라 결정된다. 그리고 알고리즘 자체가 가진 실행 속도도 매우 중요하다. 알고리즘의 실행 시간은 2가지 부분으로 나누어서 생각 할 수 있다. 첫번째는 입력 값이다. 같은 알고리즘을 사용한다고 가정했을 때, 1부터 100까지 더한 결과를 구하는 것과 1부터 1억까지 더하는 것의 시간 차이는 크다. 입력값이 클수록 알고리즘을 푸는데 더 오랜..
우리가 지금 살아가고 있는 삶은 그 무엇보다도 소중하다. 삶이 없다면 가족과 보내는 시간, 연인과의 즐거운 데이트, 혼자 즐기는 취미생활 모든 것들을 놓지게 된다. 우리 삶은 힘든 순간도 있지만 기쁜 순간도 무척이나 많기에 아름답고 소중하다. 그래서 우리는 타인이 나의 삶에 위협을 느낀다고 생각하면 불같이 화를 낸다. 길을 가다가 누군가 갑자기 당신에게 칼을 들이 댄다고 생각해보자. 우리 모두 그 상황을 벗어나기 위해 애쓰려고 할것이다. 보편적인 행동은 경찰에 전화하여 나를 보고하거나, 그 사람을 힘으로 제압 할 수 있다면 때려 눕힐 수도 있고, 충분히 도망칠 수 있는 상황이라면 그렇게 할것이다. 미치지 않고서야 타인에게 자신의 목숨을 쉽게 내놓지는 않을 것이다. 이성적인 인간이라면 자신의 목숨이 위험하..
도둑이 0~9까지 숫자로 되어있는 다섯자리 비밀번호를 풀어야 한다고 가정해보자. 그리고, 도둑은 그 비밀번호에 대한 사전 정보가 전혀 없다고 가정하다. 이때, 선택할 수 있는 방법은 무엇일까? 바로 모든 다섯자리 숫자인 10만개를 순서대로 하나 쳐보는 것이다. 1. Brute Force란? Brute Force 알고리즘은 가능한 경우의 수를 모두 입력하는 것이다. 이게 무슨 알고리즘이냐고 할 수 있겠지만, Brute Force 알고리즘의 강력한 점은 예외 없이 100%의 확률로 정답을 출력해낸다. 앞에서 말한 예시대로 도둑이 10만번에 번호를 누르게 된다면 언젠가는 분명히 열린다. 00000~99999까지 계속 입력하다보면 비밀번호를 알아낼 수 있다. 사전 정보가 없을 때라면 무조건 선택 할 수 밖에 없..
전임자의 폭정으로 인해 왕이 될수 있었던 중종은 배경이 약하다보니 재위 기간 내내 신하들에게 시달렸다. 특히 중종반정이 참여한 공신들에게 많이 시달렸다. 중종에게 우유부단한 지도자라는 인식이 생기게 된 배경에 이런 배경이 큰 역할을 했다. 중종은 신하들과 소통하려고 노력 했으나 항상 마지막의 결과가 좋지 못했다. 신하들과 같이 좋은 사회를 만들려 노력했지만 출신이 끝끝내 발목을 잡거나 공신들의 입김으로 인해 좋은 결과를 만들어 내지 못했다. 중종을 논할때 빼놓을 수 없는 인물이 바로 조광조이다. 그래도 중종이 단순히 신하들에게 끌려다는 왕으로만 평가해서는 안되는 이유가 바로 조광조이다. 이황과 이이가 훗날 사림들이 학문적 스승이었다면, 조광조는 정치적 스승으로 남게된다. 임진왜란 이후 벌어지게 되는 조선..
이번 시간에는 파일을 통한 입출력 방법에 대해 알아보자. 우리는 Java 프로그램을 통해 다양한 파일에서 데이터를 읽어 들이기도 하고, 파일을 생산해내기도한다. 이번 주제 역시 기초적인 Java 프로그래밍 지식은 반드시 필요하다. 1. 파일 입력 객체지향 언어인 Java에서 파일 입출력 역시 클래스를 통해 진행된다. 기본 매커니즘은 파일 입출력을 담당하는 클래스의 객체를 선언하고, 읽고자 하는 파일을 파라미터로 선언해야 한다. 그 이후, 해당 객체의 메소드를 통하여 파일을 읽어 들으면 된다. 아래에서 파일 입출력에 대해 자세히 알아보자. 다음과 같은 간단한 구조의 텍스트 파일을 읽어 들이는 방법에 대해 알아보자. Java에서 파일을 읽는 클래스는 'FileInputStream'이다. 해당 클래스를 선언에..
모든 프로그래밍의 기본은 입출력(I/O)에서 시작된다. 프로그램이란 입력받은 데이터에 따라 결과를 연산하고 다른 시스템에 이를 전달 하는 것이다. 전달 받게되는 값을 우리는 출력값이라고 부른다. 모든 프로그램은 사용자가 데이터를 입력하는 방법이 존재해야 한다. 그리고 사용자는 그 결과를 받아내야한다. Java 언어에서 어떤 방식으로 프로그램에 입출력을 하는지 알아보자. 이번 글에대해 이해하기 위해서는 Java언어에서 변수의 종류와 선언 방법, 그리고 클래스 개념에 대해서는 기본적으로 숙지하고 있어야 이해하기 수월할 것이다. 1. 콘솔 입력 Java에서 입출력은 크게 2가지 방법으로 나뉜다. 바로 콘솔 입출력과 파일 입출력이다. 콘솔 입출력은 프로그램 실행 환경에 따라 각각 달라진다. Java의 경우 많은..