본문 바로가기

분류 전체보기106

[Effective C++] 항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자. 오늘은 두번째 시간! 오늘은 소멸자에서 예외가 발생할 경우를 대비해 예외처리를 잘 해주자에 대해서 이야기한다. 데이터베이스의 연결이 항상 닫히도록 하는 함수를 db.close라고 하자. 그러면 소멸자에 db.close라는 함수를 작성하면 된다. 하지만 db.close에서 오류가 발생할 경우 즉, 연결을 닫다가 오류가 발생하면 문제가 발생한다. 메모리 누수등 여러 문제가 발생할 수 있기 때문에 try catch로 프로그램을 바로 끝내는 코드를 작성하자는 것이다. 하지만 필자는 다음과 같은 코드가 제일 좋다고 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class DBconn { public: void close(){ db.close(); closed = tr.. 2019. 7. 22.
[Effective C++] 항목 7: 다형성을 가진 기본클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. Effective c++의 item을 간단히 정리하려고 한다. 오늘은 상속시키려는 클래스는 소멸자를 반드시 가상 소멸자로 선언해야만 한다는 주제에 대해 알아보기로 하자. 가상 소멸자로 선언해야 하는 이유는 파생 클래스에서 기본클래스의 포인터를 delete로 소멸시킬때 기본클래스만 소멸이 되고 파생클래스는 소멸이 안되어 메모리 누수현상이 발생한다. 따라서 상속시키려는 클래스는 소멸자를 가상함수로 사용해야 한다. 여기서 주의할 점은 가상함수를 C++에서 구현하면 클래스에 프로그램 실행중에 주어진 객체에 대해 어떤 가상함수를 호출해야하는지 결정하는 자료구조 vptr(가상함수 테이블 포인터 : virtual table pointer), vtbl(가상함수 테이블 : virtual table)가 별도로 들어가야 하.. 2019. 7. 18.
NAVER CAMPUS HACKDAY 2019 SUMMER 후기 : 네이버 핵데이 기말고사 등 여러 일이 마무리되어 드디어! 네이버 핵데이 후기를 쓰려한다.ㅎㅎ 지원 꾸준히 3년간 학점을 꽉꽉 채워 들었던지라 4학년때는 수업 2개만 들으면 됬기에 전공과 관련된 대외활동을 중점적으로 하기로 마음먹었다. 취업도 염두에 두고 있었기에 지원자격이 되는 곳은 모두 자소서를 쓰고 부딪혀 보았다. 그러던 중 한 친구를 통해 네이버 핵데이를 모집한다는 것을 알게 되었고 난 처음에 그냥 단순한 헤커톤이라 생각하고 좋은 기회겠다 싶어 지원하였는데 알고보니 사실상 네이버 신입공채라고한다. 자기소개서 네이버 핵데이가 자기소개서에서 다른 기업들과 달랐던 점은 깃헙 주소를 필수로! 남겨야 했다는 점이다. 깃헙주소가 없으면 지원자체가 불가능하다. 또한 이 깃헙에 어느정도 자신이 자기소개서에 어필한 내용이 올라가.. 2019. 6. 27.
[C++] 코드그라운드 연습문제 프로그래밍 경진대회 문제풀이 문제링크 코드그라운드 연습문제 프로그래밍 경진대회 codeground Codeground is a real-time coding website open to those interested in software development and algorithms. www.codeground.org 간단하지만 효율적인 알고리즘이 잘 떠오르지 않는 문제이다. 문제에서 각 라운드 마다 받은 점수의 합이 제일 높은 사람이 우승한다고 하였는데 이는 우승자가 여러명일 수도 있다는 이야기이다. 이 조건이 이해가 되지 않아 질문이 많은 문제이다. 구하려는 것은 우승이 가능한 사람의 수이므로 각 점수에다 최대치(N)를 더한 점수가 어떤 기준점수를 넘는지 안넘는지 판단하면 된다. 여기서 기준점수는 다른 모든 점수들을 최저로 만.. 2019. 6. 19.
[C++,구현,BFS,DFS] 백준 15686번 치킨 배달 문제풀이 문제링크 백준 15686번 치킨 배달 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 www.acmicpc.net DFS,BFS를 모두 쓴 조금은 힘든? 문제이다. 최대 M개의 치킨집을 고르는 건 DFS, 치킨집을 골라 최소거리를 구하는 건 BFS로 구현하였다. 밑에 코드에 나.. 2019. 5. 25.
[C++,구현] 백준 16234번 인구 이동 문제풀이 문제 링크 백준 16234번 인구 이동 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 www.acmicpc.net 문제를 풀고 나서 생각해보니 연합을 만들 때 DFS/BFS 어느 방법으로 해도 상관없을것 같다. 나는 DFS를 사용하였다. side case에 걸리지 않고 한번에.. 2019. 5. 24.
[C++,구현] 백준 17143번 낚시왕 문제풀이 문제 링크 백준 17143번 낚시왕 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하 www.acmicpc.net 코테에서 2문제 "완벽히" 풀 자신이 없다면 선택적으로 한문제 완벽히 맞추고 넘어가야 한다! 명심 또 명심! 1 2 3 4 5 6 7 8 9 10 11 12 13 14.. 2019. 4. 28.
[C++,구현] 백준 17144번 미세먼지 안녕! 문제풀이 문제링크 백준 17144번 미세먼지 안녕! 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 왼쪽 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼 www.acmicpc.net 이문제 1솔 했다고 생각했는데 결과는 불합이었다...ㅜ 수행시간이 문제였던건가ㅜ 아쉽다. 좀더 실력을 갈고 닦자 지금 다시 풀어보니 백준에서는 통과가 .. 2019. 4. 25.
[Error,C++] void value not ignored as it ought to be "void value not ignored as it ought to be" PS를 하다 위와 같은 에러를 접한적이 있다. 다른 에러는 해석하면 알 수 있는 에러라 쉽게 어떠한 에러인지 알 수 있지만 위의 에러는 해석을 하자면 "void 값은 그것이 해야하는 것처럼 무시되지 않는다"???? 한번에 와닺지가 않는다. 그래서 검색을 해본 결과! 정의한 함수중에 void로 리턴형을 지정한 함수를 리턴형이 있는 것처럼 사용했을 때 나타나는 오류임을 확인할 수 있었다. 예시 코드를 아래에 첨부한다. 1 2 3 4 5 6 7 #include void num(){ printf("리턴값이 없는 함수입니다."); } main(){ int a=num(); } cs 함수의 리턴형을 void가 아닌 다른 형식으로 바꾸어주던가.. 2019. 4. 23.
[C++,구현] 백준 14890번 경사로 문제풀이 문제 링크 백준 14890번 경사로 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 오늘 종일 고민한 문제이다. 다른일이랑 같이 하려니 정신이 분산되어 머리만 더 복잡해지는거 같다ㅜㅜ 앞으로 조용한 곳에서 단시간 집중하고 해치워야겠다. 아이디어가 생각 나지 않아 구현이 어려웠다. 찾아보니 핵심아이디어는 현재까지 연속된 높이의 계단수를 세는것! 아이디어를 얻어 완성한 후 한번 WA를 받았는데 조건에 계단의 높이가 1일 차이일때만 경사로를 설치할 수 있다는 조건이 있었다. 문제도 제대로 읽자..ㅜ 1 2 3 4 5 6 7 8 9 10 1.. 2019. 4. 6.
[C++,완탐] 백준 14500번 테트로미노 문제풀이 문제 링크 백준 14500번 테트로미노 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누 www.acmicpc.net 완전탐색 문제이다. DFS 재귀방식으로 풀었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24.. 2019. 3. 30.
[C++,구현] 백준 14891번 톱니바퀴 문제풀이 문제 링크 백준 14891번 톱니바퀴 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다. 이때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다. 톱니바퀴를 회전시키려 www.acmicpc.net 구현문제이다. 간단하다면 간단할 수 있는 문제인데 오류찾는거까지 순수하게 2시간정도 걸린거 같다ㅜ 문제를 많이 풀어서 보다 빠르고 능숙하게 풀도록 해야겠다. 1 2.. 2019. 3. 27.