전체 글 175

[자료구조] - LCRS_TREE 구현 (C++)

1. 개요 이번 자료구조는 TREE의 종류 중 하나인 LCRS_TREE이다. LCRS는 Left Child Right Sibling의 약자로 왼쪽 포인터는 자식을, 오른쪽 포인터는 형제를 가리키는 TREE이다. 학교에서는 이 LCRS트리를 배운적은 없다. 일반적인 트리에 대한 개념을 배우고 이진 트리(이진 탐색 트리)와 수식트리를 배웠다. 따라서 LCRS트리는 스스로 모든 메소드를 구현해야 했는데 오히려 배운점이 더 많았다. 다음은 LCRS트리의 이론이다. 2. 이론 LCRS트리는 앞에서 설명했듯이 왼쪽은 자식을 오른쪽은 형제를 가리키는 트리이다. 즉 data를 기리키는 필드 하나와 왼쪽, 오른쪽 포인터의 역할을 기리키는 포인터 두개로 구성되어있다. 다음은 LCRS트리이다. 내가 배운 책에서는 LCRS트..

[최종본] C++를 활용한 오목게임 만들기 - AI모드의 OOP적 설계

1. 개요 드디어 AI(?)모드를 환성하였다. 말이 AI모드지 사실상 1인 플레이 모드이다. 아주 간단한 판별 알고리즘을 사용하였다. 다행이도 오목에 관련된 알고리즘이 설명되어있는 블로그를 찾았다. 이 블로그를 참고하여 OOP적으로 설계된 AI모드의 오목게임을 만들어보았다. 다음은 내가 참고한 블로그 글의 주소이다. 참고자료: https://ku-hug.tistory.com/2 오목 AI/인공지능의 간단한 원리 및 코드 대학교 1학년때 C언어 교수님이 프로그램을 만들어 제출하라해서 만든 프로그램... 조잡하다ㅠㅠ 인공지능보단 여러가지 패턴에 가중치를 설정해서 가중치가 가장 낮은 곳에 돌을 놓는 프로 ku-hug.tistory.com 기존에 만들어둔 Concave클래스를 상속받았기에 AI모드 역할을 하는 ..

C++를 활용한 오목게임 만들기 - PvP모드의 OOP적 설계

1. 개요 방학 때, 들은 특강을 계기로 만들어 보았던 오목 프로그램. 학기가 지나고 같은 특강을 똑같이 신청하게 되었다. 이유는 Class에 대한 문법은 알아도 이를 활용한 OOP적인 설계는 하지 못했기 때문이다. 내가 블로그에 올린 오목게임의 베타버전을 보면 알겠지만, 하나의 클래스가 거의 main()함수의 역할을 하는 절차지향적인 설계를 볼 수 있을 것이다. 베타버전의 오목게임을 보고싶으면 아래 링크를 통해 확인할 수 있다. 오목게임 베타버전: apape1225.tistory.com/32?category=815520 C++를 활용한 오목게임 만들기(베타버전) - array 이차배열 구현(STL) 1. 개요 방학 때, 교수님께서 따로 진행하시는 특강을 듣게 되었는데 최종 과제로 제출한 프로그램을 올려..

[명품 HTML5+CSS3+Javascript 웹 프로그래밍] - Open Challenge 08

1. 문제 안내 교재 8장 Open Challenge 08를 구현하시오. 드디어 한 학기가 끝났다. 제일 어리석은 변명은 "시간이 없어서"라는 변명이라지만, 개인적으로 바쁜 한학기를 보내 블로그 업로드에 신경을 쓰지 못하였다. 지금이라도 과제들을 정리하여 한번에 꾸준하게 업로드 했으면 좋겠다. 2. 코드 작성 - CSS 과제를 제출하고 나서 알게 된 사실이지만, 교수님께서 CSS를 따로 주셨다고 한다... (심지어 몇가지 기능의 답까지.) 점수취득이 목적이 아니라 공부를 위한 것이기에 상관 없었지만 화면구성과 기능 구현에 많은 어려움을 느낀 것은 사실이다. 다음은 CSS코드이다. 각각의 카드들을 div태그로 구현하였다. 따라서 세개의 div태그를 옆에 나란히 두어야 하기에 display를 inline-b..

[모바일 프로그래밍 과제] - 9주차 ( Paint 메소드, ArrayList)

1.과제 안내문, 예시 출력화면 C++을 공부할 때 Vector와 같은 STL 자료구조에 대해 공부한적이 있었다. 자바에서는 가변저항을 사용한 적은 없지만 이렇게 공부한 덕분에 조금 쉽게 이해할 수 있었다. 아십게도 자바의 가변저항에 대해서는 자세하게 설명하지 않을 것이다. 이 과제는 Paint() 클래스를 다루는 과제이기 때문이다. 다음은 문제 풀이이다. 2. 문제풀이 - ArrayList 그래도 ArrayList에 대한 기본적인 설명은 하고자 한다. ArrayList는 다음과 같이 선언할 수 있다. ArrayList 리스트이름 = new ArrayList(); ArrayList의 가장 좋은 점은 가변리스트 즉, 초반에 크기를 정하지 않아도 되는 리스트라는 것이다. 백준을 많이 풀어보신 분은 알겠지만,..

[모바일 프로그래밍 과제] - 8주차 (직접풀어보기 8 - 2)

1. 과제 안내문, 예시 출력화면 과제 #8 직접 풀어보기 8-2 교재 내용을 확인하고 해결해서 제출합니다. 단, 상단의 그림 번호는 그림이 3개라면 1/3 ~ 3/3으로 표시되도록 합니다(0이 아니라 1에서 시작해야 하니 주의~) 제출방법: xml 및 자바 파일, 실행 화면 캡쳐 3장 이상을 압축하여 zip 형식으로 제출합니다. 커스텀뷰 파일을 꼭 포함합니다. 중간고사 이후 블로그의 업데이트가 많이 늦어지게 되었다. 밀린 글들이 정말 많다... 과제 세개를 동시에 올리니 체력의 한계가 느껴지지만, 방금 과제 하나가 더 올라왔다... 웹프로그래밍에 대한 글도 최대한 빨리 올릴 예정이다. 2. 문제풀이 이번 과제는 SD카드에 있는 데이터를 다루는 과제이다. 때문에 커스텀과 같은 부분은 다루지 않겠다. (저..

[모바일 프로그래밍 과제] - 7주차 (직접풀어보기 7 - 1)

1. 과제 안내문, 예시 출력화면 모든 단원들이 그렇겠지만, 이번 단원에서도 새로운 기능을 배웠다. 조금 다른 점이 있다면 onCreate() 매소드 안에서만 리스너를 구현할 수 있는 기존의 위젯들과는 다르게, 이번에 배운 menu는 onCreate() 매소드 밖에서 해당 매소드를 구현해야 한다는 것이다. XML 파일 또한 따로 제작해야 하는데, 자세한 것은 문제풀이 과정에서 설명할 것이다. 2. 문제풀이 menu안에 표시될 항목들은 XML 파일을 따로 제작해야한다. 파일이 있어야할 경로는 res파일안에 menu파일에 생성면 된다. 만약 res 파일 안에 menu파일이 존제하지 않는다면 오른쪽 res파일에 마우스를 위치한 채 오른쪽 마우스를 클릭 후, New -> Android resource Direc..

[모바일 프로그래밍 과제] - 6주차 (탭호스트)

1. 과제 안내문, 예시 출력화면 다음과 같은 안드로이드 애플리케이션을 완성하라. 상단에 "색상"과 "회전"이라는 2개의 탭이 표시된다. "색상" 탭을 누르면 green, blue, red라는 3개의 라디오버튼이 상단에 나타나고 각 버튼을 누를 때마다 탭화면의 색상이 변경된다. 탭화면 가운데에 "색상 탭의 내용"이라는 텍스트가 큰 글씨로 표시된다. "회전" 탭을 누르면 상단에 "Left"와 "Right"라는 버튼이 나타나고 탭화면 중앙에 "회전 탭의 내용"이라는 큰 글씨의 텍스트가 표시된다. Left 버튼을 누를 때마다 텍스트가 시계 반대 방향으로 10도 회전하고, Right 버튼을 누를 때마다 텍스트가 시계 방향으로 10도 회전한다. 가장 오류가 많았던 과제 중에 하나이다. 뷰 컨테이너 자체가 정해진 ..

[모바일 프로그래밍 과제] - 5주차 (직접풀어보기 6 - 1)

1. 과제 안내문, 예시 출력화면 과제 #5 직접 풀어보기 6-1 (자세한 사항은 교재를 참고할 것) 실습 6-1을 다음과 같이 수정하라. 1) 캘린더뷰 대신 데이트피커를 사용하여 날짜를 설정한다. 2) 과 버튼을 제거한다. 대신 기능은 크로노미터를 클릭하면 동작하게 하고, 기능은 아래쪽 연도를 롱클릭하면 동작하게 한다. 3) 처음에는 라디오버튼, 데이트피커, 타임피커가 안 보이도록 설정하고, 크로노미터를 클릭하면 라디오버튼이 나타난다. 라디오버튼을 클릭하면 피커가 표시된다. 아래쪽 연도를 롱클릭하면 라디오버튼, 데이트피커, 타임피커가 사라진다. 구현방법 참고: - 버튼에서 했던 작업은 크로노미터의 리스너를 만들어 거기로 이동함 - 버튼의 작업은 tvYear에 OnLongClickListener를 작성하..

[안드로이드 프로그래밍 연습문제] Chapter 5 - 5번 (RelativeLayout)

1. 문제 안내, 예시 화면 오른쪽 화면을 XML 파일로 만드시오. 단 렐러티브레이아웃에 버튼을 사용하고 중앙에 있는 의 상대적인 위치로 다른 위젯을 배치한다. 기준 위젯의 크기는 가로세로 150dp이다. 2. 문제 풀이 이 문제는 RelativeLayout에 대해 알마나 깊은 이해력을 가지고 있는지를 시험하는 문제이다. 중요한 점은 center버튼 즉 기준 버튼만을 이용하는 것이 아닌, 레이아웃 자체의 배치 속성(layout_centerHorizontal)도 같이 섞어 사용해야한다는 점이다. 이 두가지를 이해하려면 여러 시도밖에 없는 것 같다. 다음은 코드이다. 실행결과는 예시화면가 똑같기에 올리지 않겠다.