전체 글
[바킹독 알고리즘] 0x04강:Linked List
연결리스트 성질 k 번째 원소 확인/변경 위해 O(k) 필요 임의의 위치에 원소 추가, 제거가 O(1) (추가/제거하는 위치를 알고있는 경우) Cache rate hit은 낮지만 할당이 좋다. → 임의의 위치에 원소 추가하거나 제거하는 연산이 많을경우 연결리스트 사용 좋다. 연결리스트 종류: 단일 연결리스트/이중연결 리스트/환형 연결리스트 배열 vs 연결리스트 연결리스트 구현 #include using namespace std; const int MX = 1000005; int dat[MX], pre[MX], nxt[MX]; int unused = 1; void insert(int addr, int num){ dat[unused] = num; pre[unused] = addr; nxt[unused] = ..
[BOJ/C++] 3273번 두 수의 합
문제 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000) 출력 문제의 조건을 만족하는 쌍의 개수를 출력한다. 풀이 아이디어 - 입력된 숫자들을 배열에 담는다 - 합으로 나올 수 있는 최대 값 크기만큼 bool array를 만든다. - O(N)에 문제를 풀고, ai+aj=x가 있는지..
[BOJ/C++] 1406번 에디터
문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가 있다. 이 편집기가 지원하는 명령어는 다음과 같다. LDBP $ 커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨) 커서를 오른쪽으로 한 칸 옮김 (커서가 문장의 맨 뒤이면 무시됨) 커서 왼쪽에 있는 문자를 삭제함 (커서가 문장의 맨 앞이면 ..
[바킹독 알고리즘] 0x03강:Array
연습문제: O(1)에 배열 안 원소 중 2개의 합이 100인게 존재하는지 확인하기 int func2(int arr[], int len) { int occur[101] = {}; for (int i = 0; i < len; i++) { if (occur[100 - arr[i]] == 1) { return 1; } occur[arr[i]] = 1; } return 0; } 0~100까지 인덱스가 있는 배열을 만듬 내가 입력한 배열을 돌면서 원소에 해당하는 값을 occur 배열 인덱스 값으로 1을 추가함. 만약에 100-해당 원소 가 occur 배열에서 1 값을 가지고 있으면 합 100이 가능한 원소가 존재한다는 뜻 따라서 존재여부로 O(1)에 값을 구할 수 있다. 문제 풀이 현황 연습 문제✔ 10808 알파..
[BOJ/C++] 1475번 방번호
#include #include #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); string N; vector vec(10); int max = vec[1]; fill(vec.begin(), vec.end(), 0); cin >> N; for (int i = 0; i vec[9] + 1) { vec[6]--; vec[9]++; } else if (vec[9] > vec[6] + 1) { vec[9]--; vec[6]++; } } for (int i = 0; i < 10; i++) { if (max < vec[i]) {..
[바킹독 알고리즘] 0x02강:STL
STL과 함수 인자 stl 벡터를 함수 인자로 넘길때 이를 복사하는 과정이 필요하기 때문에 O(N) 걸림 하지만 레퍼런스 사용시 그 과정이 생략되어 우리가 생각하는 것처럼 O(1)이 걸린다. 표준 입출력 공백포함된 함수를 입력 받을땐 scanf/ cin 안됨 → 둘다 공백 앞까지만 입력으로 받기 때문 → 따라서 getline을 사용하자! c에 printf나 scanf 안쓸꺼면 ios::sync_with_stdio(0) 사용하기 (sync를 끊는다는 뜻) cin.tie(0) : cin 사용 시 cout 버퍼를 비울 필요가 없기 때문에 이를 사용. endl : 사용하지 말기.. 개행하고 버퍼 비우는 명령어이므로 할 필요가 없다.
[UMC/Android] 9주차 - Open API 활용
9주차 - Open API 활용 🧙♀️ Retrofit2 를 이용해 OpenAPI 연동 - 주간 박스오피스 API로 Recyclerview 구현 retrofit을 build 하는 부분을 전역적으로 사용할 수 없을까? 에 대한 궁금증 발생 싱글톤 패턴을 이용하면 activity마다 build 할 필요없이 전역적으로 사용 가능하다! object RetrofitService { private const val BASE_URL = "" //받아올 URL 을 넣어주면 된다. val retrofit:Retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() } // 다음과 같이..
[Android] Retrofit2 싱글톤패턴 적용하기
Retrofit2 싱글톤패턴 적용하기 UMC 안드로이드 세미나에서 retrofit2 를 사용하는 방법을 배웠다. 당시 세미나에서 retrofit를 사용할 Activity에다가 build를 하셨다. 그렇다면 retrofit을 통해 서버와 데이터를 주고받을 activity전부에 저렇게 build를 다 해야하는건가 의문이 생겼고, 관련 질문을 하니 싱글톤패턴에 대해서 알려주셨다! 이를 기억하기위해 블로그에 작성해보고자 한다. 싱글톤 패턴이란? 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 싱글톤패턴을 사용하면 1번의 정의만으로 전역적으로 사용할 수 있다. 그러므로 NetworkService, DatabaseService등 하나의 객체만 필요 할 경우 사용된다! 사용이유 싱글톤패턴으로 인스턴스를 생성..
[Jetpack Compose] Text 만들기
Jetpack Compose Text 만들기 @Composable fun BirthdayGreetingWithText(message:String,from:String) { // 함수 단어 첫말은 대문자로 Column { Text(text = message, fontSize = 36.sp) Text(text = from , fontSize = 24.sp ) //각 Text를 작성 할 수 있따. } //Column은 안에 Text들이 수직적으로 나열되도록 해줌! //Row는 수평적으로 나열 } @Preview(showBackground = true) //미리 볼 수 있도록 하는 주석 @Composable fun DefaultPreview() { HapplyBirthdayTheme { BirthdayGreet..
[요즘 IT] Jetpack Compose를 배워야하는 이유?
구글 Compose Camp에 참여하기 전 나는 요즘IT 사이트에서 해당 글을 보게되었다. Jetpack Compose, 뭐가 좋은데? | 요즘IT Jetpack Compose, 뭐가 좋은데? | 요즘IT 알라미 Android 팀에서도 최신 UI 빌드 트렌드를 따라가기 위해, 더 나아가 Compose의 이점을 활용하기 위해 기존 UI 빌드 방식을 Jetpack Compose로 전환하고 있습니다. 이에 대한 첫걸음으로 다음 ‘설정 yozm.wishket.com 안드로이드를 공부하면서 Jetpack에 대해 관심이 많아졌고 XML을 사용하지 않는 Jetpack Compose에 대해서도 자연스럽게 궁금했었다. 마침 이 글을 발견했고 읽어보았는데... 결론적으로 왜 Jetpack Compose로에 대체가 이루어질..
[UMC/Android] 8주차 - RoomDB 활용하기
8주차 - RoomDB 활용하기 🍀구현영상 및 설명 이전 주차에 bundle을 활용해서 Activity와 Fragment간 데이터를 전달했던 것을 모두 RoomDB로 바꾸어서 만들었다. RoomDB를 활용해 메모 수정, 삭제, 추가 기능을 구현하였다. 메모 리스트 RV에서 item 클릭시 해당 리스트의 메모 id를 받아오고 이를 매개변수로 활용해 각 메모를 수정 및 삭제 했다. FrameLayout을 활용해 즐겨찾기 toggle를 구현하고, 보관함에 즐겨찾기 메모가 담기도록 하였다. 사용한 각 Query는 다음과 같다. @Dao interface MemoDao { //메모 추가 @Insert fun insert(memo:MemoData) @Delete fun delete(memo:MemoData) //메..
[UMC/Android] 7주차 - Thread 이용한 타이머 만들기
7주차 - Thread 이용한 타이머 만들기 ⏱️ 구현 영상 코드 UMC_Android/week7 at master · ss99x2002/UMC_Android ⏱️ 구현 설명 시간 선택 페이지 59분 59초까지 타이머를 설정할 수 있는 페이지로 Number Picker를 사용해서 시간을 설정하도록 하였다. 시간 선택 페이지와 타이머 페이지는 FrameLayout으로 겹쳐두고 visible 속성을 통해서 보이고, 안보이고를 지정하였다. 따라서 시작버튼을 누르면 타이버 레이아웃이 뜬다 타이머 페이지 시간선택 페이지에서 선택한 시간의 타이머가 돌아가는 페이지로 시작 버튼을 누르면 타이머가 돌아간다. 시작 버튼을 누르면 해당 버튼은 invisible되고 정지 버튼이 visible된다. 정지버튼을 누르면 타이머가..