0. 들어가기 앞서 이번에 소개할 프로젝트는 대학교 3학년 여름 방학동안 4명의 동기들과 함께 진행했던 등산 보조 안드로이드 어플 제작 프로젝트다. 아이디어 구상부터 서비스 구현, 시연 발표까지 전 과정을 열심히 준비한 팀 프로젝트로 작년 교내 소프트웨어 경진 대회에서 입상까지 한 작품이다. 안드로이드 어플을 제작한 경험은 이전에 한 번 있었는데 훨씬 높은 수준의 어플을 동기들과 협력해 구현하면서 많은 것을 배울 수 있었다. *데모 영상: https://www.youtube.com/watch?v=nayPppPBjAQ 1. 프로젝트 소개 코로나의 여파로 인해 실내 운동보다 야외 운동을 선호하는 경향이 높아졌다. 실제로 통계 자료에 따르면 19년도 평균 등산객 수보다 21년도 평균 등산객 수가 더 증가했다...
0. 들어가기 앞서 대학교 3학년 2학기에 박지웅 교수님의 수업을 들으면서 한 학기 동안 총 네 명의 팀원이 진행한 프로젝트이다. 해당 프로젝트의 전반적인 작업에 모두 참여하면서 온전한 서비스를 완성하기까지 정말 많은 공을 들였고 가장 애정이 가는 프로젝트이므로 블로그에 기록해보고자 한다. 데모 영상: https://www.youtube.com/watch?v=Rs0VtGXXfao 1. 프로젝트 소개 기존 우리 학교 비교과 프로그램의 온라인 수업 출석 방식은 명확하게 정해져 있지 않고, 공식 출석 인증 플랫폼도 없기 때문에 대부분 채팅으로 진행한다. 채팅으로 출석을 진행할 경우 강의에 방해가 되기도 하고, 담당자는 채팅을 일일이 확인해야 하기 때문에 번거롭고 불편하다. 이러한 불편함을 해소하고자, 우리 학..
21-2학기 데이터 베이스 프로그래밍 강의를 수강하면서 팀 프로젝트를 진행했다. Node.js를 사용해 가상 머신에 서버를 구축하고, DB도 설치해서 웹 애플리케이션을 구축했는데, Node.js를 처음 사용해보면서 겪은 많은 시행착오들과 어려움이 있었다. 그중 하나를 공유해보고자 한다. 우선 우리 팀이 개발한 웹페이지는 아래와 같다. 우리 학교 비교과 프로그램들의 출결을 효율적으로 실행하고 관리할 수 있는 웹앱으로 출석 인증, 설문조사 알림 메일 등 다양한 기능을 지원한다. 내가 맡은 부분은 '출결 관리자'의 메인 화면인데, (1) 로그인한 출결 관리자가 출결 담당하는 강의들을 띄워주고, (2) 각 강의를 클릭했을 때, 유효한 출결 정보가 있다면 그것을, 아니라면 빈 출결 정보 화면을 띄워준다. 마지막으..
객체 지향의 3대 특징을 아는가? 취업 인터뷰에서 C++ 언어를 장점으로 내세운다면 반드시 듣게 되는 인터뷰 질문이다. C++ 언어의 가장 큰 특징은 '객체 지향 언어'라는 점인데, 이것이 어떤 효과를 내고 어떤 장점이 있는지 정확히 설명할 줄 알아야 C++에 대한 전문성을 증명하면서 면접관에게 좋은 인상을 줄 것이다. 그럼 그 복잡하고 어려운 특징을 어떻게 설명하면 좋을까? -본 내용은 성신여자대학교 컴퓨터 공학과 홍의석 교수님의 파이썬 강의를 참고하여 작성했습니다. PIE : Polymorphism Inheritance Encapsulation 객체 지향에 대한 질문을 받는다면 'PIE'를 기억하자. Pie는 Polymorphism, Inheritance, Encapsulation 세 단어의 앞 글자..
1. 마우스 버튼 클릭 이벤트: 난이도 下 화면에 사각형을 그리고 마우스 왼쪽 버튼을 누르면 사각형의 크기를 증가시킨다. 마우스 오른쪽 버튼을 누르면 사각형이 작아지도록 하는 프로그램을 작성해보자. from tkinter import * #기본 선언 window= Tk() w=Canvas(window, width=400, height=300) w.pack() #기본 사각형 그리기 x=200 y=200 square= w.create_rectangle(75,75,x,y) #마우스 왼쪽 버튼 클릭시 사각형 크기 증가 def bigger(event): global x,y,w,square x+=25 y+=25 w.coords(square,75,75,x,y) #마우스 오른쪽 버튼 클릭시 사각형 크기 감소 def s..
Vector는 C++ 언어를 사용해 여러 코드를 구성할 때 정말 유용하게 쓸 수 있는 자료구조이다. C++의 배열은 선언 시 배열의 '사이즈'가 정해져 있어야만 하는데, 여러 가지 동적 할당의 경우의 수가 많은 복잡한 코드를 구성할 때는 처음부터 사이즈를 정할 수 없거나, 사이즈를 능동적으로 줄였다 늘렸다 하는 경우가 많기 떄문에 이럴 때 'vector'를 사용하면 편리하다. 1. Vevtor 기본 사용법 vector가 정의되어 있는 헤더 파일 를 include 해준다. 선언 방법: vector [변수 명] (ex: vector v;) data type에는 내가 선언해줄 vector의 원소들의 데이터 타입을 입력해주면 되고, 변수 명에는 해당 벡터의 이름을 붙여주면 된다. 참고로, 에는 vector도 넣..
오늘의 주제는 '우선순위 큐'이다. 이는 내부적으로 '힙(Heap)' 자료구조를 구현하고 있기 때문에 함께 익혀보도록 하자. 또한 우선순위 큐를 활용한 프로그래밍 문제를 풀어보며 응용하는 시간도 가져보자. Priority Queue란? C++의 컨테이너 어댑터인 priority queue는 큐의 원소 중 가장 큰 값을 우선 순위로 두고 오름 차순으로 원소들을 배열하는 큐의 한 종류이다. 어떤 원소의 삽입(push)나 삭제(pop)가 발생할 경우 큐의 우선순위에 맞추어 정렬한다. 자료구조 Heap으로 구현되었기에 push에 의한 정렬은 O(logN)의 시간 복잡도를 가진다. 사용법과 기본 매서드는 아래와 같다. 1. priority_queue 선언 헤더 파일를 include 해준다: #include pq;..
1. 리스트 [ List ]★★★★★ - 리스트는 항목(item)들을 저장하는 컨테이너로서 그 안에 항목들이 '순서를 가지고' 저장된다. - 자동으로 늘어나고 줄어든다. (memory allocation/dealloaction) - 리스트는 어떤 타입의 항목이라도 저장할 수 있다. - 인덱스(index)를 통해 리스트의 위치를 알 수 있고, 접근할 수 있다. 1) 기본 선언 aList= ['p', 'y', 't' , 'h', 'o', 'n'] 파이썬 내부적으로 리스트를 선언했을 때, 아래와 같이 메모리가 할당되고, 리스트 이름이 리스트가 할당된 메모리를 가리키는 형태이다. 2) 인덱스 활용 - 인덱스를 이용해 리스트 특정 위치에 접근해 해당 값을 불러올 수 있고, 혹은 해당 위치에 원하는 값을 대입할 수..
[완전 탐색 알고리즘]은 무엇일까? '완전 탐색 알고리즘'은 이름에서 알 수 있듯 답을 찾기 위해 모든 상황을 다 계산하여 답을 찾도록 구현하는 알고리즘으로 시간이 가장 오래 걸리는 방법이지만, 가장 정확한 답을 찾을 수 있다. 완전 탐색 알고리즘을 풀 때, 'for 문'을 사용하면 금방 해결의 실마리를 찾아낼 수 있지만 for문을 얼마나 체계적으로, 효과적으로 짜느냐가 중요한 관건이다. 완전 탐색 알고리즘의 시간 복잡도는 for문이 얼마나 중첩되어 있느냐에 따라서 크게 다른데 for문이 x개 중첩되면 시간 복잡도가 n의 x제곱이 되는 만큼 시간 복잡도가 매우 크다. 완전 탐색을 사용해야 하는 두 문제를 리뷰해보면서 해당 알고리즘에 대해 파고들어 보자. 백준 2309번: 난이도 下 문제 설명: 왕비를 피..
스마트 포인터, 왜 사용하는 걸까? C언어로 개발을 하다 보면 new를 사용해서 메모리를 동적으로 할당받아 사용해야 하는 경우를 많이 볼 수 있다. 이때, 주의해야 할 점은 메모리를 할당받을 경우, 사용 후 반드시 Delete 해줘야 하는 것인데, 그렇지 않을 경우 '메모리 누수(Memory Leak)'가 발생하여 메모리를 낭비하게 된다. 그래서 최신 C++에서는 사용자가 메모리를 관리해야 하는 번거로움을 줄이고, 메모리/리소스 누수와 예외 안전성을 보장하기 위해 포인터처럼 동작하는 클래스 템플릿, '스마트 포인터'를 도입했다. 간단히 말하자면 스마트 포인터는 사용이 끝난 메모리를 자동으로 해제해준다. 스마트 포인터, 어떻게 사용하면 될까? 우선, 스마트 포인터는 세 가지 종류가 있다. 이들에 대해 각각..