전체 글

전체 글

    [C++] 백준 2504번 괄호의 값

    [C++] 백준 2504번 괄호의 값

    2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 스택 자료구조 문제. 구현력을 필요로 하는 노가다 문제이다. 문제 분석 스택 하나에 입력들을 넣어놨다가, 괄호가 닫히는 경우를 처리해주면 된다. 나같은 경우에는 다음과 같이 처리했다. 현재 입력이 '(' 또는 '['인 경우 -> 그냥 스택에 넣어준다. 현재 입력이 ')' 또는 ']'인 경우 -> 만일 스택의 위에 있는 게 숫자들일 경우, 다 더해준 후 *2 / *3을 해준다. 스택의 위에 있는 게 '(' / '[' 일 경우 '(' / '['를 빼내고 2를 넣어..

    [C++] 백준 13460번 구슬 탈출 2

    [C++] 백준 13460번 구슬 탈출 2

    13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 삼성 SW 역량 테스트 기출 문제 수록 문제. 구현 / 시뮬레이션 문제로, 설계를 잘하고 구현을 해야 풀 수 있는 문제. 문제 분석 문제의 조건은 다음과 같다. N*M 보드가 있고, 보드에는 구멍이 하나 있다. 빨간 구슬과 파란 구슬이 있다. 빨간 구슬을 구멍으로 빼야 한다. 파란 구슬은 구멍으로 빠지면 안된다. 구슬은 직접 움직일 수 없고 보드를 상, 하, 좌, 우로 기울여서 움직여야 한다. -> 이 때, 두 개..

    [C++] 백준 1005번 탈출

    [C++] 백준 1005번 탈출

    1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 그래프 탐색과 DP를 통해 해결할 수 있는 문제. 특정 건물을 짓기 위해 어떻게 빨리 지을 수 있는 지 알아내는 알고리즘을 작성하는 문제였다. 알고리즘 분류를 보니, 위상 정렬이라는 알고리즘이 있었는데 해당 알고리즘에 대해서는 내가 아는 바가 없었지만 풀 수는 있었다. 문제 풀이 예시 이미지를 통해 문제를 해석해 보았다. 4번 건물을 짓기 위해서는 10초의 시간이 필요하며, 2번과 3번의 건물이 지어져 있어야 한다. 2번 건물을 짓기 위해서는 1초의 시간이..

    [Kotlin] 안드로이드 코루틴(Coroutine) 사용해보기.

    [Kotlin] 안드로이드 코루틴(Coroutine) 사용해보기.

    Android의 Kotlin 코루틴 | Android 개발자 | Android Developers Android의 Kotlin 코루틴 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확 developer.android.com 코루틴은 경량 스레드처럼 사용할 수 있는 단위이다. 하나의 프로세스 내부에 여러 개의 스레드가 존재할 수 있고, 하나의 스레드 내부에 여러 개의 코루틴이 존재할 수 있다. 코루틴은 비동기 작업을 효율적으로 처리할 수 있도록 해주며 이점은 다음과 같다. 실행중인 스레드를 Block하지 않으므로 스레드 내에서 여러 개의 많은 코루틴을 실행할 수 있다. -> ..

    List, Set, Map 각각의 특성

    List 순서가 있고 중복을 허용하는 자료구조. 인덱스로 원소 접근, 원소 삽입, 원소 삭제가 가능하다. 크기가 가변적이고, 이에 따라 비어있는 공간이 없다. 원하는 데이터를 찾을 때 최악의 경우 O(n) 시간이 걸릴 수 있다. Set 순서가 없고 중복을 허용하지 않는 자료구조. 인덱스가 존재하지 않아서 반복자를 사용한다. 탐색이 빠르다. 정렬 되어 있을 시 O(log n) Map 순서가 없는 {Key, Value} 쌍으로 이루어진 자료구조. Key는 중복을 허용하지 않지만 Value는 중복이 가능하다. 인덱스가 존재하지 않아서 반복자를 사용한다. 탐색이 빠르다. 정렬 되어 있을 시 O(log n)

    [Kotlin] 페이징 3.0 라이브러리 사용해보기 + 로딩 기능도 사용해보기(그리드 레이아웃에서 로딩 가운데에 표시해보기.)

    [Kotlin] 페이징 3.0 라이브러리 사용해보기 + 로딩 기능도 사용해보기(그리드 레이아웃에서 로딩 가운데에 표시해보기.)

    페이징 라이브러리 개요 | Android 개발자 | Android Developers 페이징 라이브러리 개요 Android Jetpack의 구성요소 페이징 라이브러리를 사용하면 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로드하고 표시할 수 있습니다. developer.android.com 안드로이드 개발을 하다보면, RecyclerView를 사용할 때가 많다. 그런데 네트워크 통신을 통해 List 형태의 데이터를 받아올 때 너무 많은 데이터를 한 번에 받아오도록 구현할 경우에는 로딩이 오래 걸리고, 사용자로 하여금 데이터를 많이 사용하도록 하게 된다. 이를 방지하기 위해 Server의 API에서 페이지 번호를 나누어서 내려주게 되는데, 안드로이드에서는 이것을 받기 위해 예전에..

    [C++] 백준 3055번 탈출

    [C++] 백준 3055번 탈출

    3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 4179번 불! 과 같은문제 [C++] 백준 4179번 불! 그래프 탐색 문제. 최근에 이런 비슷한 문제인 3055번 탈출이라는 문제를 풀다가 실패했었다. 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 kimyunseok.tistory.com 그래프 탐색을 두 종류로 나누어서 진행해주면 된다. 저 때 풀이와 완전 다르게 풀었다. 문제 풀이 다음과 같은 조건이 있다. 마법을 부려 숲에 홍수를 낸다. 1마리인 도치가 비버굴..

    [C++] 백준 16562번 친구비

    [C++] 백준 16562번 친구비

    16562번: 친구비 첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. (1 ≤ Ai ≤ 10, www.acmicpc.net 그래프 탐색 문제. 그래프가 여러개 존재한다고 생각하고 각 그래프에서 최소값을 찾으면 되는 문제다. 문제풀이 각 친구마다 친구비가 드는데, 친구의 친구도 친구가 된다. 즉, 이는 친구 관계가 edge가 되고 학생은 vertex가 된다고 해석했다. 그 후, 연결된 Vertex들 끼리 그래프 탐색을 한 후에 최소비용을 찾으면 된다. 어차피 최소비용의 학생하고만 친구를 하면 나머지는 자동으로 친구가 될..

    [C++] 백준 5430번 AC

    [C++] 백준 5430번 AC

    5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문자열 파싱, 자료구조를 이용해서 풀 수 있는 문제. 디테일에서 놓친 부분들이 많아서 틀렸습니다를 많이 받았다. 문제풀이 조건을 다음과 같이 해석해서 풀었다. '덱'을 사용해서 풀고, 현재 방향이 front인지 back인지를 저장한다. 시작의 경우 방향은 front가 된다. 'R' 명령어가 들어왔을 경우 : front / back 방향을 반대로 전환한다. 'D' 명령어가 들어왔을 경우 : 현재 덱에서 방향에 있는 수를 하나 pop한다. 이 때 덱이 비어있으면 error가 발생하도록 한다. 코드 전문 /* * 백준 54..

    Reactive Programming(반응형 프로그래밍)과 RxJava와 LiveData 비교. (Observer 패턴) 간단하게 살펴보기

    Reactive Programming(반응형 프로그래밍)과 RxJava와 LiveData 비교. (Observer 패턴) 간단하게 살펴보기

    C++, Java로 코드를 짤 때에 순차적으로 진행되는 코드를 Imperative Programming (명령형 프로그래밍)이라고 한다. 명령형 프로그래밍의 안드로이드를 예시로 들어보겠다. (극단적인 예시) 회원의 정보를 나타내는 TextView들이 있고, 회원의 정보를 불러온 후 이 정보를 TextView에 나타내기 위해서는 TextView가 회원의 정보를 일일이 나타내도록 TextView에 text를 설정해주어야 한다. 만일 회원의 정보를 불러온 후 바로 View들이 회원의 정보가 불러와진 것을 알고 Update될 수 있다면? 이를 위해 등장한 것이 Reactive Programming, 반응형 프로그래밍이다. Reactive Programming (반응형 프로그래밍) 반응형 프로그래밍은 코드의 영향..