분류 전체보기
[C++] 백준 23290번 마법사 상어와 복제
https://www.acmicpc.net/problem/23290 23290번: 마법사 상어와 복제 첫째 줄에 물고기의 수 M, 상어가 마법을 연습한 횟수 S가 주어진다. 둘째 줄부터 M개의 줄에는 물고기의 정보 fx, fy, d가 주어진다. (fx, fy)는 물고기의 위치를 의미하고, d는 방향을 의미한다. 방향 www.acmicpc.net 삼성 SW 역량 테스트 기출 문제 수록 문제 고려해야 할 부분들이 상당히 많은 문제이지만, 특별한 알고리즘은 필요가 없다. 문제 조건 정리 기본 조건 4x4 격자 r행 c열을 (r, c)로 표현 물고기 M마리가 주어지고, 이동 방향(8가지)을 가진다. 상어도 격자 한 칸에 위치한다. 최초에는 둘 이상의 물고기가 같은 칸에 있을 수 있고, 상어와 물고기가 같은 칸에..
[C++] 백준 1043번 거짓말
1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 그래프 탐색 문제. 그래프 탐색이라는 점을 발견한다면 어렵지 않게 풀 수 있다. 변수를 잘못 재사용해서 몇 번 틀려버려서 아쉬운 문제. 문제 풀이 문제는 다음과 같은 조건들이 있다. 지민이는 사실 혹은 과장(거짓말)을 말한다. 최초 사실을 아는 사람이 K명이라 할 때, 이 사람들에게는 사실만 말해야 한다. 사실을 들은 사람이 있다면 이 사람들이 있는 파티에서는 사실만 말해야 한다. 즉, 사실 & 과장 둘 다 들을 수는 없다. 따라서 사실을 아는 사람이 있는 파티를 먼저 제..
[C++] 백준 17298번 오큰수
17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 자료 구조 - 스택 문제. 알고리즘 분류를 알고 풀어서 쉽게 접근할 수 있었다. 알고리즘 분류를 모르고 풀면 풀 수 있었을지 모르겠다. 문제풀이 다음과 같은 생각을 하고 풀었다. 큐를 두 개 만든다. 하나는 입력을 받아놓는 큐, 하나는 큐에서 꺼낸 수를 저장해놓는 큐. 입력을 받아놓는 큐에서 하나씩 꺼내보며 꺼낸 수를 저장해놓는 큐의 맨 위와 비교한다. 만일 큐가 비어있다면 오큰수가 없다는 뜻이다. 큐가 비어있지 않을 때에는 현재 수와 저장해놓은 큐의 맨 위의 수를 비교한다..
[C++] 백준 16235번 나무 재테크
16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 삼성 SW 역량 테스트 기출 문제 소속 문제. 구현 / 시뮬레이션 문제 중 골드4지만 꽤 낮은 정답률인 문제이다. 아마 나 포함 대부분 시간 초과 문제가 발생하는 것 같다. 문제 조건 문제의 힌트는 다음과 같다. 땅의 크기가 N x N이다. (r, c)은 r은 행, c는 열을 의미. S2D2라는 로봇은 양분을 추가해줌. 맨 처음 5만큼의 양분이 각 칸에 존재 또한 다음과 같은 순서로 진행된다. 처음에 주어진 조건 M개의 나무를 구매한다. 여러 개 ..
[C++] 백준 20056번 마법사 상어와 파이어볼
20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 삼성 SW 역량 테스트 기출 문제 에 수록된 문제. 구현 / 시뮬레이션 문제로, 문제에서 요구하는 대로 풀면 된다. 오랜만에 풀어보는 알고리즘 문제라서 특수한 알고리즘이 필요없는 구현 문제일 줄 알았는데 시간 복잡도를 생각 안하고 풀어서 시간 초과를 냈었다. 문제풀이 다음과 같은 순서대로 구현했다 모든 파이어볼을 이동시킨다. 2개 이상의 파이어볼이 있는 곳에서 합친 후 4개로 나눠준다. 1번 로직과 2번 로직을 반복만 시켜주..
[C++] 백준 2589번 보물섬
그래프 탐색 문제. 오랜만에 풀어보는 알고리즘 문제라 그런지 머리가 잘 안 돌아갔지만 그래프 탐색이란 것을 알고 쉽게 풀 수 있었다. 문제풀이 땅 - 땅으로 이동하는 거리중 가장 긴 거리를 찾으면 된다. 돌아가면 안되고 최단거리 기준이므로 DFS는 안되고 BFS로 탐색해야한다. 이 기준대로만 구현하면 쉽게 풀 수 있다. /* * 백준 2589번 보물섬 * https://www.acmicpc.net/problem/2589 * 그래프 탐색 이론 - 너비 우선 탐색, 브루트 포스 */ #include #include #include #include using namespace std; int height, width; char board[51][51]; bool visit[51][51]; vector visi..
[Kotlin] 안드로이드 AAC ViewModel과 앱 아키텍처 가이드 (feat. SharedPreferences) - 여러 Fragment에서 AAC ViewModel 공유해서 사용하기.
ViewModel 개요 | Android 개발자 | Android Developers ViewModel을 사용하면 수명 주기를 인식하는 방식으로 UI 데이터를 관리할 수 있습니다. developer.android.com 앱 아키텍처 가이드 | Android 개발자 | Android Developers 앱 아키텍처 가이드 이 가이드에는 고품질의 강력한 앱을 빌드하기 위한 권장사항 및 권장 아키텍처가 포함되어 있습니다. 이 페이지는 Android 프레임워크 기본을 잘 아는 사용자를 대상으로 합 developer.android.com AAC ViewModel은 Android Architecture Components ViewModel로 Android Jetpack의 구성요소이다. 예전에 다른 글에서 AAC V..
[C++] 객체 지향 프로그래밍 - 얕은 복사와 깊은 복사 (Heap 메모리, Stack 메모리)
객체 지향 프로그래밍 (Object Oriented Programming, 이하 OOP)에서의 데이터의 단위는 객체이다. OOP에서의 객체 복사는 기존 객체의 사본을 만드는 일이다. 복사의 방식은 얕은 복사(참조 형식)와 깊은 복사(값을 복사)가 존재하게 된다. 예시 코드 /* * OOP - 얕은 복사와 깊은 복사 */ #include using namespace std; class MyObject { public: string* name; int age; //기본 생성자 MyObject(int age, string name) { this->name = new string(name); this->age = age; } //기본 복사 생성자와 같음. 레퍼런스로 만들지 않으면 복사생 //MyObject(co..
[Kotlin] 안드로이드 디자인 패턴 예시 프로젝트 - MVC, MVP, MVVM (같은 기능, 다른 코드로 살펴보기.)
앱 아키텍처 가이드 | Android 개발자 | Android Developers 앱 아키텍처 가이드 이 가이드에는 고품질의 강력한 앱을 빌드하기 위한 권장사항 및 권장 아키텍처가 포함되어 있습니다. 이 페이지는 Android 프레임워크 기본을 잘 아는 사용자를 대상으로 합 developer.android.com 안드로이드에서는 사용하는 디자인 패턴들이 여러 가지가 있다. 예전에는 대표적인 디자인 패턴이 MVC (Model - View - Controller)였는데, 요새는 MVVM (Model - View - ViewModel)인 것 같다. MVP (Model - View - Presenter) 패턴은 잘 못 본것 같은데, 우아한 형제들에서 런칭중인 배달의 민족 앱은 MVP + Repository 디자..
[Kotlin] 안드로이드 AAC ViewModel을 Fragment에서 사용 시, LiveData Observe가 두 번 되는 현상 해결법. (Owner, Event Wrapper)
MVVM 디자인 패턴의 예제 프로젝트를 만들던 도중에 다음과 버그가 일어났다. 화면을 먼저 살펴보자. 메인화면과 MVVM 버튼을 눌렀을 때 화면전환이 된 모습이다. 실제로 Room DB / Retrofit2 & OkHttp 와 같은 DB를 접근해서 가져오는 것은 아니고, 특정 클래스에 미리 담아놓은 값들을 가져오는 것이다. 해당 화면에서 AAC ViewModel, LiveData를 사용해서 수정 완료 버튼을 누르면 AAC ViewModel이 Repository를 통해서 값을 수정하게 되는 로직이다. 코드는 조만간 정리될 디자인 패턴 정리 글에 의해 올려질 예정이지만 잠깐 살펴보자면, 모델 클래스 /** * Design Pattern에서 Model이란, Data를 포함해서 Data를 송, 수신하는 모든 행..