목록전체 글 (165)
개발하는 리프터 꽃게맨입니다.

https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 1. 문제 2. 아이디어 기본적으로 그리디 알고리즘이다. 가장 작은 카드를 더해서 카드 뭉치를 업데이트해주면 된다. 그러면 가장 작은 요소로 배열을 정렬해서 하는 방법이 있는데, 이는 조금 문제가 있다. 왜냐면, 업데이트 + 정렬 + 업데이트 + 정렬은 생각보다 비용이 크기 때문이다. 정렬의 경우 아무리 빨라봐야 평균 n log n 시간 복잡도가 소모된다. 시..

Windows 데스크톱 어플리케이션을 실행하면 위와같은 파일이 자동 생성됩니다. 콘솔 앱과는 사뭇다른 모습이고 처음보는 함수들이 난무합니다. 심지어 main도 안보이구요. 어쨌든 이 구조가 기본 window 프로그램을 만들기위한 프레임워크입니다. 위에서부터 천천히 분석해보도록 하겠습니다. 전역변수들을 볼 수 있습니다. WCHAR은 그냥 2바이트 char 자료형을 재정의한 것 입니다. HINSTANCE 는 프로그램의 HANDLE을 의미합니다. 윈도우 운영체제에서 실행되는 프로그램을 구별하기위한 ID값인데, HINSTANCE는 Win32 프로그램이 메모리 상에 올라가있는 시작 주소 값을 저장하는 자료형입니다. 즉, HINSTANCE (핸들 인스턴스) 는 내 프로그램의 시작 주소라고 볼 수 있죠 즉, hIns..

https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net 문제 아이디어 BFS 문제의 대표격 중 하나인 미로찾기 문제입니다. 그러나 시간 제한이 1초이기 때문에 O(N^2) 인 BFS로는 풀 수 없고, O(N logN) 인 다익스트라 알고리즘을 이용해서 풀어야만 합니다. 맨 좌측 상단에서 시작해서 맨 우측 하단까지 어떻게 도달할 것인가? 에 대한 문제이고 1은 벽인데 필요하다면 벽을 부술수도 있습니다. 단, 벽을 최대한 적게 부수면..

1. 문제 https://www.acmicpc.net/problem/17070 2. 아이디어 다이나믹 프로그래밍으로 풀 수 있는 문제일 것 같다. 특정 좌표를 (y, x) 라고 했을 때 파이프의 우측 좌표를 기준으로 (좌측 좌표는 생각할 필요 없다.) (y, x) 에 가로로 도착할 횟수 + (y, x) 에 세로로 도착할 횟수 + (y, x) 에 대각선으로 도착할 횟수 의 합을 구하면, 해당 좌표에 도달할 수 있는 모든 경우의 수가 된다. 이 때, 벽에 막힐수도 있기에 예외처리에 신경쓴다. 3. 풀이 먼저 전역변수 목록이다. tableSize는 격자의 크기 table은 격자의 정보를 입력하는 부분 dpRight, dpDown, dpRD 는 각각 특정 좌표에 가로로 도착하는 경우, 세로로 도착하는 경우, 대..

1. 개요 빌더 패턴은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴입니다. 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식이죠. 예를 들어서 몬스터를 만들어낸다고 생각합시다. 몬스터는 종족, 공격력, 체력, 방어력 등 많은 매개변수를 가지고 있습니다. 이것들을 커스텀해서 생성하는 방식을 지원하는 것이 빌더 패턴입니다. 2. 예제 주석에 적힌대로 위와같은 형식으로 생성을 한다면 어떤 매개변수를 설정하는지 명확하지 않습니다. 이런 식으로 따로 생성을 위한 빌더를 정의해서 사용하면, 몬스터에 대한 청사진도 만들 수 있고, 명확하게 매개변수를 전달할수도 있습니다. 이렇게 청사진을 만들어놓고 빌드자체를 나중에 따로..