분류 전체보기
-
Python의 heapq는 sort보다 빠른가..?카테고리 없음 2022. 12. 15. 20:41
코딩테스트 문제를 풀던 중, 다른 사람의 풀이에서 정렬을 용이하게 하기 위해 heapq를 사용하는것을 보았다. 필자는 heapq를 사용하면 빠른가 싶어서 heapq를 사용했으나, 여전히 시간초과가 되는 것을 보았다. 이에 heapq는 정말로 빠른가 하는 것에 의문이 들었다. heapq가 무엇이고 어떻게 사용하는지는 아래 링크의 글을 통해 알게되었다. (글의 나머지 부분에서 설명할 heappush, heappop에 대한 설명 나옴) 파이썬의 heapq 모듈로 힙 자료구조 사용하기 | Engineering Blog by Dale Seo heappush와 sort의 실행 시간을 비교하기 위해 아래와 같은 코드를 만들어 테스트해보았다. import random from heapq import heappu..
-
c++ 참조자, 생성자, 복사생성자카테고리 없음 2022. 1. 4. 21:39
요새 자바 타입(?)의 언어만 하다가 오랜만에 c++을 했더니 헷갈리는 것들이 많아서 c++에서 헷갈리는 것들을 정리해보았다. 1. 참조자 참조자에 대해 너무 잘 설명해 놓은 글이 있어 링크로 대체한다. https://modoocode.com/141 참조자는 포인터 대신 사용할 수 있다. 배열이나 부피가 큰 클래스를 함수의 매개변수로 전달해야 하는 경우, 객체의 본체를 복사해서 전달하면 메모리 면에서 비효율적이다. 참조자를 사용하면 마치 포인터처럼 주소만 전달해서 메모리 효율을 높일 수 있고, 전달받은 참조자를 사용할때는 &를 사용할 필요 없이 마치 본체인 양 쓰면 된다. 참조자가 무엇인지에 대한 설명은 생략하고 둘의 차이점만 간략하게 요약한 것: Peter의 우아한 프로그래밍 :: [C++] 포인터(P..
-
Wait와 await의 차이 & Deadlock이 발생하는 경우 해결법카테고리 없음 2021. 9. 28. 01:26
1번 코드: public async Task DoSomething() { await SomethingAwaitable(); ... } public async void Button_Click() // 버튼 클릭으로 실행되는 함수 { await DoSomething(); ... } 위와 같은 코드가 있다. 위의 코드를 아래와 같이 변경하면 어떻게 될까? 2번 코드: public async Task DoSomething() { await SomethingAwaitable(); ... } public void Button_Click() // 버튼 클릭으로 실행되는 함수 { DoSomething().Wait(); ... } await 키워드를 빼버리고 DoSomething이 반환하는 Task를 Wait하도록 변경..
-
swift closure에서 사용하는 weak self 정체 알기카테고리 없음 2021. 6. 23. 09:56
swift에서 이런 것을 본 적이 있을 것이다. let alertAction = UIAlertAction(title: Title, style: .default, handler: { [weak self] guard let self = self else { return } self.DoDefaultAction(); }) handler 파라미터는 () -> Void 타입인 closure이다. closure 안에 [weak self]라는 것이 있는데...? 이번 글에서는 저 weak self의 정체가 무엇인지 알아보자. 일단, weak self의 정체를 알기 전에, 메모리 구조부터 이해할 필요가 있다. 일단 c나 c++같은 초기 언어의 메모리 구조를 먼저. 링크: 코딩의 시작, TCP School 아래는 c++..
-
Gimbal Lock카테고리 없음 2021. 5. 31. 22:35
역학에서 3차원 물체가 놓인 방향을 나타내기 위해 오일러 각을 사용한다. 아래 링크의 움짤이 오일러 각을 설명하기에 좋아보여서 가져옴... 위의 움짤을 참고하면서 아래의 설명을 읽으면 오일러 각을 이해할 수 있을 것이다. orientation이 0, 0, 0 일 때의 모습. 월드 좌표와 바디 좌표가 일치한다. z 축을 회전축으로 회전. 보통 ψ로 많이 표시한다. 현재 바디의 orientation은 ψ, 0, 0 ψ회전을 한 상태에서 바디 좌표계의 x축을 회전축으로 해서 회전한다. 보통 θ로 표현한다. 바디의 orientation은 ψ, θ, 0 ψ와 θ 회전을 한 상태에서 바디 좌표계의 x축을 회전축으로 회전한다. 보통 φ로 표현한다. 바디의 orientation은 ψ, θ, φ 3차원에서의 물체가 놓인..
-
Firestore DocumentSnapshot.exists()가 false를 반환할 때카테고리 없음 2020. 12. 24. 02:36
아래는 Firestore에 문서가 있는지 없는지 확인하는 방법을 구글링했을 때 나온 방법이다. java - Checking if a document exists in a Firestore collection - Stack Overflow DocumentSnapshot.exists()를 사용하는 방법이 대표 답변으로 채택되어있다. 아래는 채택된 답변의 코드를 그대로 복사해 온 것이다. FirebaseFirestore rootRef = FirebaseFirestore.getInstance(); DocumentReference docIdRef = rootRef.collection("yourCollection").document(docId); docIdRef.get().addOnCompleteListener(n..
-
Firestore에 데이터 추가하기 (안드로이드)카테고리 없음 2020. 12. 18. 17:52
(안드로이드 스튜디오 & 코틀린 기준 설명) (이번 편에서는 CRUD 중 Create 기능에만 집중하여 설명합니다.) 일단 firebase 프로젝트를 만들고, 앱등록을 하고, 안드로이드 스튜디오와 구글계정 연동 작업도 진행해야 한다. 여기까지는 검색하면 많이 나오는 부분이니 생략. 여기까지는 각자 알아서 완료하고 오세요... 이제 firestore를 사용 가능하도록 설정한다. 필자는 아래의 링크를 참조하였다. [Firebase] Cloud Firestore 데이터 생성 방법 :: Copy Coding (tistory.com) 프로덕션 모드와 테스트 모드에 대해서 얘기하자면, 프로덕션 모드로 할 경우, Firestore 하나를 쓰기 위해 Authentication 까지 공부해야 하는 사태가 일어난다. 실제..
-
화면 회전하면 Fragment가 두 번 호출되는 문제카테고리 없음 2020. 11. 11. 21:06
상황: Activity에 Fragment를 붙여놓고 Activity가 생성되면 자동으로 Fragment가 생성되도록 해놨다. 무슨 말인지 이해가 안 되면 조금 내려서 나오는 첫 번째 코드를 참고하자. 문제: 화면을 회전시키면 액티비티가 Destroy되었다가 다시 생성된다. 액티비티, 화면, 회전, 생명주기(activity, screen, rotation, lifecycle)의 키워드로 검색하면 많이 나올테니 자세한 설명은 생략한다. 여기까지는 좋은데, 한 번 회전시킬 때마다 Fragment가 두 번씩 생성되는 문제가 생겼다. 아래와 같은 코드로 로그를 찍어 확인해보았다. 액티비티 코드: class MainActivity : AppCompatActivity() { private val TAG = "Acti..
-
GitHub Archive Program 취소하는 방법카테고리 없음 2020. 11. 3. 14:15
왜 이제까지 발견하지 못했는지 모르겠지만 내 깃헙 프로필에 Arctic Code Vault Contributor 라는 뱃지가 달려있었다. 뱃지에 마우스를 올려보니 올해 1,2월쯤에 만들어 올린 카드게임 프로젝트가 GitHub Archive Program에 선정되었다나 뭐라나... 카드게임 프로젝트가 뭐냐하면 c언어를 처음 배우고 예제 프로젝트로 만든 카드게임인데... archiveprogram.github.com/ Arctic Code Vault Contributor를 인터넷에 검색해보니 GitHub Archive Program에 기여한 사람들한테 주는 뱃지인데, GitHub Archive Program는 인터넷 저장소가 사라졌을 때를 대비해 1,000년 이상 코드 사본을 필름에 인쇄해서 북극에 보관하는..
-
안드로이드 EditText 가상키보드 없애기 - RadioButton편카테고리 없음 2020. 10. 12. 17:39
(현재 글의 코드 예시는 코틀린으로 작성되었습니다.) 최종 목표: 아래 동영상처럼 동작하는 코드 만들기. 완성된 동작 저번 글에서 EditText를 누르면 생기는 가상키보드가 흰 바탕을 클릭했을 때 자동으로 접히게 하는 방법을 알아보았다. 이전 글 보기: nerdymint.tistory.com/2 아래 동영상은 별다른 설정을 하지 않은 라디오버튼의 동작이다. 가상키보드를 자동으로 접어주지는 않는다. 아무 설정도 하지 않은 기본 라디오버튼의 동작. 먼저, 저번 글에서 한 것 처럼 EditText의 OnFocusChangeListener를 set해야 한다. 이전 글 보기: nerdymint.tistory.com/2 EditText가 여러개일 때, 코드를 재활용하려면 아래 코드처럼 OnFocusChangeLi..