2017 카카오 신입공채 1차 테스트 2번 문제

이번에는 2번 문제 풀이 입니다.  문제를 풀면서 출제자가 얼마나 고민해서 문제를 만들었을지 느껴졌습니다. 문제에 대한 상세 설명은 카카오블로그 를 참조 바랍니다. 2번 문제는 C++ 11에 새롭게 추가된 정규표현식을 이용해서 만들어 보았습니다 #include #include #include using namespace std; // 다트 점수 3회 const int n = 3; enum DARTITEM {DART_SCORE, DART_BONUS, DART_OPTION}; struct dartResult { int score; char bonus; char option; }; void tokenizing(string str, regex reg, DARTITEM item, dartResult dart[]); void print(dartResult dart[]); void calcscore(dartResult dart[]); int main() { while (1) { string str; cout << "다트 결과 문자열을 입력하세요 (종료는 0) : "; getline(cin, str, '\n'); if (str == "0") break; regex score("((10|[0-9])[S|D|T][*|#]?)+"); if (regex_match(str, score)) { dartResult dart[n]; for (int i = 0; i < n; i++) { dart[i].score = 0; dart[i].bonus = 0; dart[i].option = 0; } tokenizing(str, regex("(10|[0-9])"), DART_SCORE, dart); tokenizing(str, regex("[S|...

2017 카카오 신입공채 1차 테스트 1번 문제

최근에 웹서핑을 하다 흥미로운 자료을 발견했습니다. 바로 2017년도 카카오 공채 1차 코딩테스트 문제. 카카오 블로그 에 방문해보면 해당 입사 시험 문제에 대해 쉽게 이해하도록 설명하고 있습니다. 개인적으로 프로그래밍을 공부하는 사람이라면 당연히 도전해봐야겠죠. 대한민국에서 손꼽히는 프로그래머 집단에서 출제한 문제인 만큼, 독창성과 함께 기업에서 어떤 프로그래밍 지식을 요구하는지 짐작해 볼 수 있는 좋은 기회가 될 거라 생각합니다. 전체 7문항이며 5시간 안에 4문제 이상을 풀면 1차 통과입니다. 아래는 그 중 가장 난이도가 낮은 1번 문제 입니다. 자세한 내용은 카카오 블로그 에서 참조하기 바라며, 제가 C++로 작성한 코드는 아래와 같습니다. #include #include using namespace std; const int n = 5; void printmap(const bitset map1[], const bitset map2[]) { // 결과 저장용 5비트 비트셋 배열 5개 bitset resultmap[n]; for (int i = 0; i < n; i++) { // 비트 OR 연산 resultmap[i] = map1[i] | map2[i]; for (int j = n-1; j >= 0; j--) { // OR연산 결과 0이면 공백, 아니면 # 출력 if (resultmap[i][j] == 0) { cout << ' '; } else { cout << '#'; } } cout << endl; } } int main() { // 10진수 5가지를 정수형 배열에 저장 int arr1[] = { 9, 20, 28, 18, 11 }; int arr2[] = { 30, 1, 21, 17, 28 }; // 5비트 비트셋 배열 5개, 각 2개 생성...

교육 과정 안내 (세부 내용)

이미지
학원에서 교육중인 내용을 좀 더 상세히 안내 드립니다. [전체 과정 요약] [엔트리 초급 과정, 4개월] [엔트리 고급 과정, 4개월] [C++ 과정, 5개월] [윈도우 프로그래밍 과정, 5개월] [심화반 과정] 전체 과정 PDF 링크 감사합니다.

원장 프로필

이미지
약 15년간 현업에서 수행했던 주요 프로젝트와 이력을 정리해 보았습니다. 원장 프로필 (클릭) 구글 블로그는 첨부파일 업로드 할 수 없어 링크로 올렸습니다.

교육과정 안내

이미지
[학원 포스터] [학원 교육 과정 안내]

블록 프로그래밍 언어, 엔트리

이미지
제가 소프트웨어 개발자로 일하면서 사람들을 만나면 많이 듣는 이야기가 "와 어려운거 하시네요!" 입니다. 또 한가지는 "밤늦게 까지 일하시겠네요" 입니다. 그렇지 않습니다. 특히 어렵다는 이야기는 저는 어른들의 막연한 두려움, 고정관념이라고 생각합니다. 제 아이가 초등학교 1학년인데 제가 엔트리를 시험(?)삼아 한번 보여주고 가르쳐 준 적이 있습니다. 크게 기대하지 않았지만 정말 이해가 빠르더군요. 백문이 불여일견이라니 제가 한번 설명드려 보겠습니다. 엔트리는 실무에서 쓰이는 텍스트 기반 프로그래밍 언어가 아니라 아이들이 쉽게 그 개념을 이해할 수 있도록 고안된 블록 기반 프로그래밍 언어입니다 우리나라 과학기술정보 통신부 등 여려 기관이 힘을 합쳐 만들어 만든 무료 소프트웨어 입니다. 공짜니깐 꼭 댁에서 아이들과 함께 즐겁게 해보시길 추천드립니다. 먼저 엔트리는 다음 주소에서 온라인 실행 또는 오프라인 버전으로 무료 다운로드가 가능합니다. 컴퓨터나 태블릿 PC에서 사용가능합니다. 엔트리 : https://playentry.org 1. 회원가입은 하지 않아도 됩니다. (차후 작품저장이나 공유시는 필요합니다) 2. 위 메뉴에서 만들기 -> 작품만들기 버튼을 눌러 볼까요. 3. 다음은 아직 잘 모르지만 시작하기를 눌러 보아요 4. 위 화면의 엔트리봇 이라는 이미지 오브젝트가 움직이는걸 확인할 수 있습니다. 왜 움직일까요? 바로 아래와 같은 명령을 컴퓨터에 지시했기 때문입니다. 이 부분이 우리가 코딩한 소스코드이기 때문이죠. 한번 살펴보면 아주 아주 간단합니다. 1) 시작하기 버튼을 아까 눌러주었죠. 이것이 엔트리를 시작하는 명령입니다. 2) 10번 반복하기는 파란색 블럭안의 블럭을 10번간 반복해서 실행하라는 의미입니다. 3) 이동방향으로 10만큼 움직이기는 3번 그림에서  엔트리봇의 화살표를 의미합니다. 4) 10만큼은 3...

C++

이미지
오늘은 C++ 언어에 대해 한번 말씀드리고자 합니다. 꼭 대학교 학점같은 느낌의 C++ 이라는 단어네요. C++은 C 라는 프로그래밍 랭귀지를 기반으로 발전된 언어입니다. 둘 사이의 차이점은 C는 구조적, 절차적 방식의 프로그래밍 언어이고, C++은 객체지향적 언어입니다. 사실 처음 프로그래밍을 배우는 사람은 절차적, 객체지향적의 의미를 잘 몰라도 됩니다. 그냥 C 프로그래밍은 복잡하고 거대한 현실을 표현/구현하기에는 부족해서 C++이 나왔다고 이해하시면 좋을 것 같습니다. 처음 프로그래밍을 공부하고자 한다면 저는 C를 배우고 C++을 배우는 것 보다는 C++을 처음부터 배우는 것을 추천드립니다. 그 이유는 C++은 C의 개념을 모두 포함하고 있고, 여기에 새로운 개념이 추가된 언어이기 때문입니다. C++은 공대에 입학하면 학부 1학년 모든 공대생이 배우는 전공기초 과목입니다.  (공업수학, 전기회로이론 등등) 사실 요즘은 중,고등학생들도 관심을 가지고 독학하는 친구들도 많이 보았습니다. C++은 모든 전자기기와 인간이 소통하는 중요한 수단 입니다. 그래서 언어라고 부릅니다. 우리가 외국인과 영어로 이야기하는 것처럼요. 아래는 간단한 C++코드입니다.  // iostream이라는 파일을 열어서 여기에 복사 #include <iostream> // std라는 이름공간을 사용(클래스간 이름충돌 방지) using namespace std; int main() {         // 1. i라는 정수 저장변수를 만들고 0을 대입, 즉 i 는 0.         // 2. i가 10보다 작다면 반복문 for{ 여기 } 여기 내용을 수행.         // 3. for{...

코딩이란?

이미지
코딩은 소프트웨어를 만드는 것을 말합니다. 소프트웨어는 크게 우리가 일상에서 사용하는 컴퓨터에 설치된 윈도우와 같은 운영체제소프트웨어와 한글, 워드, 파워포인트 각종 게임 등 운영체제 기반에서 설치되어 사용되는 응용소프트웨어로 구분할 수 있습니다. 우리가 사용하는 스마트폰에서 애플의 iOS, 구글의 안드로이드는 운영체제 소프트웨어이며, 여기에 설치하는 각종 앱 (Application을 줄여서 앱으로 보통 칭함)들을 응용소프트웨어라고 합니다. 운영체제를 만드는 것은 정말 어려운 작업입니다. 아시다시피 전 세계의 컴퓨터 운영체제는 마이크로 소프트가 거의 독점하고 있으며, 스마트폰 영역에서는 애플의 iOS와 안드로이드 등 일부 기업만이 개발해 표준화되어있습니다. 그 이유는 운영체제는 대상기기의 하드웨어를 제어하는 거대한 컴퓨터 내부 일종의 사회법규이기 때문입니다. 모든 응용프로그램들은 운영체제의 법규에 따라 동작하도록 개발됩니다. 따라서 응용소프트웨어 개발, 즉 일반적인 코딩은 컴퓨터, 또는 핸드폰의 운영체제소프트웨어와 대화, 소통해 프로그래머가 의도한 대로 명령을 내리고 운영체제의 응답을 받아 상호연동되는 소프트웨어를 만드는 것입니다. 조금 어려울 수도 있지만 처음부터 잘하는 사람은 없습니다. 소프트웨어 교육이 초등교과과정에 반영되는 이유도 미래 소프트웨어 중심의 사회에서 살아가게될 아이들에게 논리적인 문제해결능력을 조기에 키우기 위함입니다. 주위를 조금만 둘러보고 생각하면 소프트웨어가 우리생활에 영향을 미치는 않는 곳은 없습니다. 지금 글을 보고 계신 이 곳 게시판도 소프트웨어로 제작되어 있으며, 냉장고, 전기밥솥, 에어컨, 자동차 등 모든 곳에는 소프트웨어가 설치되어 있습니다.

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기