전체 글

전체 글

    [프로그래머스] 124 나라의 숫자

    문제 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 풀이 언어 Python 풀이 방법 우선 진법 변환 문제이다. 좀 특이하긴 한데 3개의 숫자를 사용하므로 3진법을 생각하면 된다. 하지만 10진수 3을 변환했을 때 10이 아니라 4가 나오는 것을 볼 수 있다. 어떻게 변환을 해야하는 것일까? 우선 변환 전과 변환 후를 표로 나타내봤다. 10진법 3진법 124 나라 1 1 1 2 2 2 3 10 4 4 11 11 5 12 12 6 20 14 3으로 나누어 떨어지는 경우에만 특이한 값을 갖는 걸 볼 수 있는데 여기에도 규칙이 있다. 맨 앞 숫자에서 -1 을 하고 뒤의 0을 4로 변환해준다는 점. 즉, 3으로 나누어 떨어지는 경우 몫에서 -1을 해준다는 의미이다. 코드 def solu..

    [LeetCode] 167. Two Sum II - Input Array Is Sorted

    입력 예시 풀이 언어 Python 풀이 방법 정렬된 배열에서 target을 만족하는 두 원소의 index를 반환하는 문제였다. 오름차순을 정렬된 배열이었기에 BST 문제라고 생각했다. 어렵지 않게 해결했다. 코드 class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: start = 0 end = len(numbers) - 1 while start < end: mid = numbers[start] + numbers[end] if mid > target: end -= 1 elif mid < target: start += 1 else: return [start + 1, end + 1] 결과

    [Android] 알림 클릭시 Activity, Fragment로 이동

    구현 문제 알림 클릭하면 특정 화면을 띄어줘야 하는 문제였다. 해결 방법 PendingIntent 를 사용하면 된다. Notification 속성에 Intent 속성을 부여할 수 있는데 이 때 PendingIntent 를 넘겨준다. 또한 PendingIntent 객체에 putExtra 로 화면 이동으로 띄어줄 Fragment 의 식별자를 넘겨준다. 이를 활용하여 MainActivity 가 onCreate 됐을 때 getStringExtra 로 Fragment 의 식별자를 가져오고 해당 Fragment 로 전환한다. 코드 - ReceiverService 우선 지난번에 구현했던 이벤트 수신 알림에 대한 코드를 가져왔다. // 이벤트를 수신했을 경우 사용자에게 알림 전송 private fun occurEven..

    [Android] 백그라운드에서 소켓 통신으로 이벤트 수신 후 알림

    구현 문제 졸업프로젝트를 진행하면서 서버에서 특정한 이벤트를 수신하면 이벤트 종류에 따라 서로 다른 2개의 알림을 띄어주는 기능을 구현해야 했다. 소켓 통신으로 이벤트를 수신하는데 Activity 이동이나 Fragment 이동에 관계 없이 서버와 연결 가능한 소켓 통신이 필요했다. 해결 방법 MVVM과 단일 Activity를 사용했기에 Activity는 MainActivity 한 개 뿐이었고 MainActivity 에서 소켓 통신을 구현하면 되는 문제였다. 하지만 앱을 사용하지 않는 상황에서도 알림을 수신해야 할 필요가 있었고 이를 위해 Service를 사용했다. 물론 MainActivity 안에 해당 기능을 구현할 수 있다. 하지만 소켓 통신이 MainActivity 자체에 종속되는 상황이 발생하기에 ..

    [TIL] 22.06.03 - iOS 화면 전환

    iOS 에서 화면 이동을 하는 방법에는 4가지가 있다. ViewController 에서 화면 전환 ViewController 가 다른 ViewController 를 호출하여 화면 전환 NavigationViewController 를 사용하여 화면 전환 화면 전환용 객체 Segue 를 사용하여 화면 전환 1. ViewController 에서 화면 전환 ViewController 위의 View 를 다른 View 로 교체하는 방식으로 메모리 누수로 인해 사용을 지양한다. 특정한 경우에만 사용한다. 안드로이드에서는 View 의 Visibility 속성을 이용하여 변경하는 방식을 자주 사용했었는데 iOS 에서는 지양한다고 하니 좀 신기했다. 이 부분에 대해선 좀 더 찾아보고 정리해봐야겠다. 2. ViewContr..

    [TIL] 22.05.27

    공부한 것 Swift 문법 알게된 것 1. Guard Guard 키워드를 사용하면 조건에 false인 경우에는 else 구문이 실행되어 이후의 코드를 실행하지 못하게 한다. continue 와 비슷하다. import Foundation func guardTest(value : Int?) { guard let value = value else {return} print(value) } guardTest(value : 2) guardTest(value : nil) // 아무것도 출력되지 않음 조건문과 유사한 기능이라고 볼 수 있는데 Guard 는 else 를 강제한다. // 일반적인 조건문 if 조건 == true { // 참인 경우에 실행할 코드 } else { // 거짓인 경우에 실행할 코드 } // G..

    [TIL] 22.05.26

    공부한 것 Swift 문법 알게된 것 1. 클래스와 구조체의 차이 1. 공통점 값을 저장할 프로퍼티를 선언할 수 있음 함수적 기능을 하는 메소드를 선언할 수 있음 내부 값을 .를 통해 접근할 수 있음 생성자를 사용해 초기 상태를 설정할 수 있음 Extension 을 사용하여 기능을 확장할 수 있음 Protocol 을 채택하여 기능을 설정할 수 있음 2. 차이점 - 클래스 참조 타입 ARC 로 메모리를 관리 상속 가능 타입 캐스팅 을 통해 런타임에서 클래스 인스턴스의 타입을 확인할 수 있음 deinit 을 사용하여 클래스 인스턴스의 메모리 할당을 해제할 수 있음 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤에 값을 변경시키면 모든 변수에 영향을 줌 (메모리를 복사) - 구조체 값 타입 같은 구조체를 ..

    [Android] MVVM 패턴 적용기 - 2

    GitHub - k906506/MVVM: 🔨 MVVM이 뭐에요? 🔨 MVVM이 뭐에요? Contribute to k906506/MVVM development by creating an account on GitHub. github.com MVVM 두 번째 시간이다. 갑작스럽게 찾아온 이유는 졸프를 진행하다가 RecyclerView 를 Room 을 사용해서 MVVM 패턴 으로 구현했는데 정상적으로 작동하지 않아서 RecyclerView + Room + MVVM 을 정리하고 코드를 다시 보려고 한다. 우선 MVVM 을 구현하기 위해서는 위의 그림을 이해하고 넘어가는 것이 좋다. 그림에서 주의깊게 봐야할 것은 화살표의 방향 이다. 모든 화살표가 단방향으로 연결 되어있고 상위 요소는 하위 요소를 참조한다. 참조..

    [코틀린 완전정복] 공변성, 반공변성, 무변성

    가변성 변할 수 있다? 가변성이 뭐에요? 🙄 코틀린 에서의 가변성은 형식 매개변수가 클래스 계층에 영향을 주는 것을 말한다. 예를 들어 형식 A의 값이 필요한 모든 클래스에 형식 B의 값을 넣어도 문제가 없다면 B는 A의 하위 형식이 된다. 아래 코드를 보자. val integer : Int = 1 val number : Number = integer // Number는 상위 자료형, Int는 하위 자료형 Int형으로 선언한 integer 변수가 Number형으로 선언한 number 변수에 할당해도 아무 문제가 없는 것을 볼 수 있다. 이게 바로 가변성이다. 또 다른 예로는 Int?와 Int가 있다. Int?는 null도 포함하므로 Int?가 Int의 상위 자료형이 된다. 가변성의 3가지 유형 기본적으로..

    [코틀린 완전정복] 제네릭

    제네릭 제네릭 , 다른 언어를 이미 경험하고 왔다면 낯선 단어는 아니다. 뭐 대충 얘기하면 자료형 을 나중에 선언하는? 그런 느낌이다. 우선 확실하게 집고 넘어가보자. 그래서 제네릭이 뭐고 왜 쓰는거에요? 🤔 제네릭 은 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정하는 방법이다. 제네릭이 나오게 된 배경은 자료형의 객체들을 다루는 메소드나 클래스에서 컴파일 시간에 자료형을 검사하여 적당한 자료형을 선택하기 위해서이다. 제네릭을 사용하면 객체의 자료형을 컴파일할 때 체크하기 때문에 객체 자료형의 안정성을 높이고 형 변환의 번거로움이 줄어든다. 제네릭의 사용 방법 제네릭은 앵글 브래킷 사이에 형식 매개변수 를 넣어 선언하고 하나 이상의 형식 매개변수를 지정할 수 있다. 형식 매개변수는 자..