1. 1에서 10까지의 자연수를 모두 곱한 수를 X라고 하자. X를 8진수로 표기하면 제일 오른쪽에 연속으로 나타나는 0은 모두 몇 개일까?① 1 ② 2 ③ 4 ④ 6 ⑤ 8※ 1부터 N까지의 자연수를 모두 곱한 수를 N 팩토리얼이라하고 N!로 표기하는데 10!은 1부터 10까지를 모두 곱한 값입니다. 10!를 8진수로 변환해야 하는데 값도 크고(10!은 3,628,800) 시간을 단축할 필요가 있으므로 팩토리얼을 아래의 그림과 같이 적절하게 분해하는 것도 방법이겠습니다. 자연수인 10진수를 N진법으로 변환하는 과정은 10진수를 N으로 나누면서 그 나머지를 취하면 되는데 10!에서 8로 나누면 나머지는 0이고 몫은 8이 빠진 7! x 9 x 10이 됩니다. 또 8로 나누어야 하는데 2 x 4로 나누면 나..
C# 코딩을 하다보면 구조체나 클래스나 뭔 차이가 있나 싶긴 하지만 몇개의 항목을 가진 간단한 데이터를 구조화해서 다룰경우에는 클래스보다는 struct문을 사용하는 구조체가 적절합니다. 예를 들면 RGB색 정보를 가진 구조체, X, Y 위치를 저장하는 구조체 top, bottom, width, depth의 창 정보를 가진 개체를 구조체로 구현할 수 있을 것입니다. public struct SysInfo { public bool dbstat, netstat; public SysInfo(bool db, bool net) { dbstat = db; netstat = net; } } 구조체는 클래스 처럼 new 생성자로 값을 설정하면서 선언할 수도 있고, 일반 변수처럼 그냥 정의하고 개별 변수에 대해서 직접 초..
C언어로 프로그램을 개발하면서 오류를 찾다가 의외의 장소에서 문제를 찾는 경우가 몇번 있었는데 바로 매크로 입니다. C언어에서는 "#define 매크로이름 매크로내용"의 형식으로 매크로를 정의하는데 이 매크로는 실행 과정에 영향을 미치는 것이 아니라 컴파일 과정에만 영향을 미칩니다. 컴파일러가 C 소스 코드를 본격적으로 컴파일하기에 앞서 전처리 과정을(precompile) 거치는데 이때 다루어지는 것이 #define문을 사용하는 매크로입니다. C언어에서는 #define 말고도 #include, #ifdef등의 전처리 문장이 있습니다. 2015년 정보 올림피아드 예선에서도 이 매크로를 다루었습니다. 위의 문제에서는 sq(x)라는 매크로를 정의했는데 이 매크로는 프로그램 실행 과정에 동작하는 것이 아니고 컴..
올해 올림피아드 예선에 아들을 데려다 주고 집에 오면서 들은 질문입니다. 내 아들이지만 머리속에 들어있는 생각은 도통 알수 없군요. 아무튼 질문을 받았으니 답을 주어야 겠지요. 이 문제는 최단 경로 계산하기라는 전형적인 문제입니다. 계산 공식에는 팩토리얼(factorial, 계승)이 쓰이므로 팩토리얼은 알아야겠지요. n 팩토리얼이라 함은 0부터 n까지의 자연수를 곱한값을 의미하고 n!로 표시합니다. 3팩토리얼은 3!로 표시하고 1X2X3의 값인 것입니다. 0부터 8까지의 팩토리얼 값은 0, 1, 2, 6, 24, 120, 720, 5040, 30320 입니다.문제는 다음과 같았습니다. C를 들러서 A에서 B까지 가는 최단 경로는 A에서 C까지 갈수 있는 최단 경로의 수에 C에서 B까지 갈수 있는 최단 경..
다중 쓰레드를 사용하는 프로그램에서 특정 자원이나 특정 코드에 대해서 동시 접근을 차단하고 한번에 하나의 쓰레드만 수행하도록 교통 정리할 필요가 있을 때 사용하는 자원이 뮤텍스(Mutex)입니다. 대표적인 IPC(Inter Process Communication) 자원으로 공유메모리, 메시지 큐와 함께 세마포어(Semaphore)가 있는데 뮤텍스는 값이 1인 세마포어라고도 할 수 있습니다. 세마포어는 통상 정수값을 가지고 프로세스가 접근할 수 있는 여유도를 지정한다면 뮤텍스는 값이 1이므로 한번에 단 하나의 프로세스나 쓰레드만 접근할 수 있도록 할 수 있는 것입니다. 뮤텍스는 프로그램 중복 실행 방지 보다는 실행중 자원 관리에 사용하는 것이 핵심 용도이지만 프로그램 중복 실행 방지를 통해서 뮤텍스 맛보기..
문제를 보니 올해 처음 참여한 아들이 C언어 공부를 좀더 열심히 했더라면 하는 아쉬움이 남습니다. C언어 기초만 잘 다졌어도 쉽게 맞출 수 있는 문제들이 꽤 있었는데 아쉬움이 있지만 C언어의 기초부터 잘 다져야 한다는 "교훈"을 마음에 새겼으면 하는 바램입니다. C언어 기초와 관련한 몇가지 문제를 풀어보면서 기초를 잘 다졌으면 합니다.18. 다음 중 변수의 이름으로 사용할 수 없는 것은?① thisway ② int_char ③ star*star ④ that_way ⑤ _6_C언어의 변수명은 다음과 같은 특성이 있습니다.영문과 숫자 그리고 밑줄(_ Underscore라 부릅니다)로 구성할 수 있습니다.영문 대문자와 소문자를 구별합니다(Case Sensitive라 합니다) C, C++, Java와 같은 프로..
※ 연관글 목록무료 마인드맵 FreeMind 설치하기핫키로 배우는 FreeMind무료 마인드맵으로 생각 정리하기Freemind로 마인드맵 작성하기FreeMind 번역 수정 및 추가하기FreeMind 속성 기능 활용하기지도를 표시하는 마인드맵마인드맵 찾기/바꾸기마인드맵에 이미지, 파일, 링크, 구름 삽입하기보안 기능으로 더욱 똑똑해진 마인드맵브레인스토밍을 비롯한 회의 도구로 무료 마인드맵 Freemind 활용하기마인드맵 노드 복제 기능 사용하기프리마인드 편집 메뉴 돌아보기마인드맵 포맷(서식) 완전정복마인드맵 탐색 요령 익히기마인드맵과 시간관리마인드맵 필터 기능 사용하기프리마인드 사용팁 공유마인드맵 공유와 협업하기마인드맵 내보내기/불러오기프리마인드 1.0.1 한글 번역 수정판 공개유용한 소프트웨어 도구의 공..
요즘 시장에 가면 어렵지 않게 구입해서 먹을 수 있는 재배용 딸기의 역사가 200여년 밖에 되지 않았다는 자료를 보고는 우리집 화단 귀퉁이에 몇년째 생명력을 이어오고 있는 딸기는 그야말로 "재배용 딸기의 야생화"가 된것이라 해야 하지 않을까 싶다. 우리나라 야산에 자라던 산딸기와도 다르고 복분자와는 더더욱 차이가 있는 재배용 딸기는 남미 칠레의 야생 딸기와 북미 야생 딸기를 교배해서 얻은 것이 그 시초라고 한다. 화단 귀퉁이에서 자라고 있는 딸기는 겨울에도 죽지않고 살아 남아서 봄이되면 아래의 사진처럼 꽃을 피우고 조금 더 있으면 빨간 열매를 선사한다. 덩굴 식물 처럼 가지를 길게 내어 자손을 번식시키는데 올해 우리 화단에는 생명력 강한 쑥과 딸기가 영역 전쟁을 한판 벌일것 같다. 긴 겨울을 이겨내고 올..
※ 연관글 목록 무료 마인드맵 FreeMind 설치하기 핫키로 배우는 FreeMind 무료 마인드맵으로 생각 정리하기 Freemind로 마인드맵 작성하기 FreeMind 번역 수정 및 추가하기 FreeMind 속성 기능 활용하기 지도를 표시하는 마인드맵 마인드맵 찾기/바꾸기 마인드맵에 이미지, 파일, 링크, 구름 삽입하기 보안 기능으로 더욱 똑똑해진 마인드맵 브레인스토밍을 비롯한 회의 도구로 무료 마인드맵 Freemind 활용하기 마인드맵 노드 복제 기능 사용하기 프리마인드 편집 메뉴 돌아보기 마인드맵 포맷(서식) 완전정복 마인드맵 탐색 요령 익히기 마인드맵과 시간관리 마인드맵 필터 기능 사용하기 프리마인드 사용팁 공유 마인드맵 공유와 협업하기 마인드맵 내보내기/불러오기 프리마인드 1.0.1 한글 번역 ..
OOP는 Object-Oriented Programming(객체 지향 프로그래밍)의 약자로 현재 프로그래머 들이 즐겨사용하는 대부분의 프로그래밍 언어에는 OOP개념이 포함되어 있습니다. VB .Net 또한 OOP 시각으로 프로그램을 만들어 가는 것이 효과적이며 VB 언어에 가장 적절한 프로그래밍 방법입니다. 초기의 프로그래밍 언어가 프로그램을 데이터와 처리 방법으로 나누는 절차적(procedural) 프로그래밍이었다면 GUI(Graphic User Interface) 기반의 사용자 환경과 수많은 이벤트에 대응해야하는 비절차적 환경에 적절한 OOP는 프로그램을 여러 객체로 나누고 이들 객체 간의 상호 작용을 기술하는 방식으로 프로그래밍합니다. 절차적 프로그래밍 언어로는 C, FORTRAN, COBOL을 들..
좋은 품질 또는 안정성 있는 프로그램이란 다양한 사용자에 의해서 발생하는 다양한 상황에서도 예상할 수 있는 결과를 내는 프로그램입니다. 프로그래머가 생각하고 준비한 범위에서는 잘 동작하지만 그 이외의 경우에는 결과를 예상할 수 없는 프로그램을 좋은 프로그램이라 할 수 없습니다. 중요하게 기억해야할 점은 "완벽함"이 아니라 "예측 가능함"입니다. 철저한 프로그램 설계와 꼼꼼한 코딩으로 모든 경우의 수를 대비한 프로그램을 작성한다면 더욱 좋겠지만 이런 과정은 기간, 인원등 자원의 투입을 수반하게 되어 있고 코드의 크기와 비용이 커짐과 동시에 버그의 출현 가능성도 높아지게 마련입니다. 이러한 "예측 가능성"을 높여주는 대비책이 바로 실행중 예외 처리입니다. 비주얼베이직의 예외 처리 방법은 이전 버전 부터 사용..
지난번 포스팅에서 오픈 소스 사이트에서 아주 고전적인 Turbo-C 2.0을 다운로드할 수 있으며(http://sourceforge.net/projects/borlandtubroc/files/Borland%20Software/) 더 간단하게는 TCC - Tiny C Compiler(http://bellard.org/tcc/)를 활용할 수 있음을 말씀드렸습니다. 이번 포스팅에서는 소스코드를 작성하기에 유용한 jEdit 텍스트 편집기에서 콘솔창을 열어서 간단한 C 프로그램을 직접 컴파일하며 편리하게 학습할 수 있는 방법을 다룰까 합니다. jEdit 편집기에 대해서는 아래의 글들을 참고해 보세요.2015/03/05 | 무료 텍스트 편집기 jEdit 한글판 배포2015/03/03 | BeanShell과 매크로,..
제가 처음 C언어를 공부할때는 터보 C 2.0을 가지고 C언어도 공부하고 심지어 업무에도 사용했던 기억이 있습니다. 도트(dot) 프린터로 연속 용지를 가지고 인쇄하던 시절 터보 C 2.0으로 업무에 활용하여 도넛 그래프를 업무 보고에 사용했던 기억이 새롭습니다. 혹시나 해서 찾아보니 누군가 오픈 소스 프로젝트를 올려놓는 소스포지(sf.net)에 Turbo-C 2.0과 3.0을 올려두었군요. 교육용 목적으로 올려두었다는데 참고할만 합니다. http://sourceforge.net/projects/borlandtubroc/files/Borland%20Software/Turbo-C 2.0을 다운로드 받으셨다면 tc.exe를 실행하시면 아래와 같은 화면을 통해서 최근의 이클립스나 비주얼스튜디오 같으 IDE가 ..
프로그램이 길어지고 복잡해 질수록 연관성 있는 코드를 별도의 묶음으로 분리해 놓으면 프로그램의 가독성이 높아지는 것은 물론이고 해당 코드가 필요한 곳에서는 언제든지 호출하여 사용할 수 있으므로 재사용성을 높이고 오류의 가능성을 최소화하는 효과를 가져올 수 있습니다. 이렇게 특정 기능을 수행하는 단위로 분할하여 묶어 놓는 작업을 모듈화라고 하며 아래의 VB.Net 콘솔 프로젝트의 기본 코드에서도 확인할 수 있지만 모든 프로그램은 하나 이상의 프로시저로 구성된다 할 수 있습니다. Module Module1 Sub Main() End Sub End Module VB.Net은 서브 프로시저와 함수(function) 두가지 형태의 프로시저(Procedure)를 정의해서 사용할 수 있습니다. 서브 프로시저와 함수는..
데이터 정렬(Sort)과 탐색(Search)은 컴퓨터 시스템의 가장 기본적인 기능으로 데이터베이스, 웹 검색, 단순 입력창에 이르기까지 다양한 영역에서 사용하는 것이므로 꼭 알아두어야 할 개념입니다. 퍼스널 컴퓨터가 등장하기 이전 부터 데이터 정렬은 여러 형태로 발전되어 왔는데 예전에는 메모리가 크지 않은 환경이었으므로 이런 제약적인 환경에서도 활용할 수 있는 알고리즘부터 최대한 검색 시간을 줄이기 위하여 검색을 감안하여 정렬된 데이터로 보관하는 기법까지 다양한 알고리즘이 존재합니다. 이런 알고리즘의 복잡도는 O(빅오 Big-Oh)로 표시합니다.■ 버블 정렬(Bubble sort)한쪽 방향으로 이동하면서 인접한 두원소를 비교하여 그 방향 맨 끝에 가장 큰수 또는 가장 작은수를 배치하고 다음번에는 동일 방..