문제 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 문제에 대한 이해 주어진 2차원 배열에서 1이라는 해당 영역을 탐색하는 DFS 문제이다. 문제를 보고 DFS의 간단한 문제라고 생각했다. 정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램 = DFS나 BFS로 섬의 갯수를 찾아달라. 어떻게 풀 것인가? 문제의 조건 w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도가 주어진다. ..
문제 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 문제에 대한 이해 주어진 문제의 조건에 따라서 입출력을 하면 되는 문제였다. 다만 시간복잡도를 참고하였을 때, 자료구조에 굉장히 많이 고민을 해야했다. 어떻게 풀 것인가? 이 문제의 경우 처음에는 LinkedList로 풀었다가 크게 얘를 먹었다. 시간초과가 계속해서 발생했고, 해결법을 찾지못해서 다른 분의 블로그를 참조하였다. https://minhamina.tistory.com/17 [백준 ..
2 초 128 MB 2911 1534 1308 53.983% 문제 홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍준이는 미로에서 모든 행과 열의 이동할 수 있는 칸을 걸어다녔다. 그러면서 자신의 움직임을 모두 노트에 쓰기로 했다. 홍준이는 미로의 지도를 자기 노트만을 이용해서 그리려고 한다. 입력으로 홍준이가 적은 내용을 나타내는 문자열이 주어진다. 각 문자 하나는 한 번의 움직임을 말한다. ‘F’는 앞으로 한 칸 움직인 것이고, ‘L'과 ’R'은 방향을 왼쪽 또는 오른쪽으로 전환한 것이다. 즉, 90도를 회전하면서, 위치는 그대로인 것이다. 입력 첫째 줄에 ..
2 초 128 MB 37727 8934 6601 23.770% 문제 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시작했다. 의심을 피했다고 생각한 형택이는 다시 게임을 켰다. 그 때 형택이는 잠시 코딩을 하는 사이에 자신의 게임 실력이 눈에 띄게 향상된 것을 알았다. 이제 형택이는 앞으로의 모든 게임에서 지지 않는다. 하지만, 형택이는 게임 기록을 삭제 할 수 없기 때문에, 자신의 못하던 예전 기록이 현재 자신의 엄청난 실력을 증명하지 못한다고 생각했다. 게임 기록은 다음과 같이 생겼다. 게임 횟수 : X 이긴 게임 : Y (Z%) Z는 형택이의 ..
Retrofit이란 Retrofit은 안드로이드 앱에서 RESTful API와 통신할 때 사용되는 라이브러리 중 하나입니다. Retrofit은 Square Inc.에서 개발된 오픈 소스 라이브러리로, 안드로이드 앱 개발을 위한 RESTful API 호출을 간편하게 처리할 수 있습니다. Retrofit은 앱에서 서버로 HTTP 요청을 보내고, 응답을 처리하며, JSON으로 직렬화하는 작업들을 자동화합니다. 또한, Retrofit은 OkHttp 라이브러리를 기본 HTTP 클라이언트로 사용하므로, 높은 성능과 안정성을 보장합니다. Retrofit은 앱에서 API를 호출할 때 필요한 여러 기능을 제공합니다. 예를 들어, Retrofit은 API URL 및 요청 파라미터를 구성하고, 요청 본문을 구성하고, API..
리눅스란? 리눅스(Linux)는 오픈 소스 운영 체제(OS) 중 하나로, 컴퓨터 하드웨어와 소프트웨어 리소스를 관리하고 사용자와 프로그램 간의 인터페이스를 제공합니다. 리눅스는 프로그램 개발, 웹 서버, 데이터베이스 서버 등의 다양한 용도로 사용되며, 안정성, 보안성, 유연성 등의 장점을 가지고 있습니다. 리눅스는 UNIX 운영 체제에서 영향을 받아 개발된 운영 체제입니다. 리눅스는 UNIX와 유사한 명령어와 파일 시스템을 사용하며, 다중 사용자 및 다중 작업 환경을 지원합니다. 또한, 소스 코드 공개 및 수정이 자유롭기 때문에 개발자들에게 인기가 높습니다. 리눅스는 다양한 배포판(Distribution)으로 제공되며, 대표적으로 Ubuntu, CentOS, Debian, Fedora 등이 있습니다. 각..
TCP(Transmission Control Protocol) TCP(Transmission Control Protocol)는 인터넷 프로토콜 스택에서 가장 많이 사용되는 전송 계층 프로토콜 중 하나입니다. TCP는 연결 지향적인 프로토콜로, 전송할 데이터를 패킷 단위로 나누어 순서에 맞게 전송합니다. TCP는 전송할 데이터를 여러 개의 패킷으로 분할하고, 각 패킷에 일련번호(sequence number)를 부여하여 전송합니다. 수신자는 이 일련번호를 기반으로 패킷을 받은 순서대로 재조립합니다. 이때, 송신자는 각 패킷 전송 후, 수신자로부터 확인 응답(ACK) 메시지를 받으면 다음 패킷을 전송합니다. 만약 일정 시간 동안 수신자로부터 ACK 메시지가 도착하지 않으면 해당 패킷을 재전송합니다. 이러한 절..
MVI 패턴이란 Android MVI 패턴은 Model-View-Intent의 약자로, 안드로이드 앱 개발에서 사용되는 아키텍처 패턴 중 하나입니다. MVI 패턴은 기존의 MVP, MVVM 등 다른 패턴과는 다르게 데이터 흐름이 단방향으로만 흐르는 것이 특징입니다. 뷰에서 인텐트를 발생시켜 모델에 전달하고, 모델에서 처리한 결과를 다시 뷰로 전달하는 방식으로 동작합니다. MVI 패턴에서는 상태를 중심으로 구성됩니다. 앱의 상태를 변경하는 인텐트는 불변의 데이터 구조로 구현되며, 상태 변화를 처리하는 모델 역시 불변의 데이터 구조로 구현됩니다. 뷰는 상태를 표시하기 위해 불변의 데이터 구조를 이용합니다. 이러한 구조는 다양한 이점을 가지고 있습니다. 불변의 데이터 구조를 사용하므로 코드의 안정성이 높아지고..