전체 글

I’m currently learning Android, ComputerScience, Algorithm and etc....
BaekJoon

[백준 알고리즘] 1303번 전쟁 - 전투(Java) 문제 풀이

문제 https://www.acmicpc.net/problem/1303 1303번: 전쟁 - 전투 첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다. 그 다음 두 번째 줄에서 M+1번째 줄에는 각각 (X, Y)에 있는 병사들의 옷색이 띄어쓰기 없이 주어진다. 모든 자리에는 www.acmicpc.net 문제에 대한 이해 그래프 이론에서 DFS를 이용한 풀이를 이용해보면 된다. 이 문제의 경우 영역과 관련된 문제에서 DFS를 이용한 문제들과 많은 연관이 있었다. 그래서 어렵게 풀지는 않았다. 어떻게 풀 것인가? DFS에서 많이 쓰이는 패턴을 쓰면 된다. 이는 코드를 보면 알게된다. W의 영역을 찾아서 제곱하여 값에 더하고 B의 영역을 찾아서 제곱하여 값에 더하고를 모..

BaekJoon

[백준 알고리즘] 2644번 촌수 계산(Java) 문제 풀이

문제 https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 문제에 대한 이해 이 문제를 보자마자, 그래프탐색이 떠올랐고, 촌수라는 개념에서 리스트를 사용함과 그리고 DFS를 통해서 촌수를 계산해야겠다고 생각했다. 이유는 촌수라는 개념에서 그래프가 떠올랐고 주어진 두사람의 촌수를 나타내는 정수에서 DFS를 통한 그래프 탐색을 이용하여 문제의 정답을 탐색하여 찾아나아가면서 촌수를 +1 씩하면 되겠다고 생각했다. 어떻게 풀 것인가? D..

BaekJoon

[백준 알고리즘] 4963번 섬의 개수(Java) 문제 풀이

문제 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개 줄에는 지도가 주어진다. ..

BaekJoon

[백준 알고리즘] 1406번 에디터(Java) 문제 풀이

문제 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 문제에 대한 이해 주어진 문제의 조건에 따라서 입출력을 하면 되는 문제였다. 다만 시간복잡도를 참고하였을 때, 자료구조에 굉장히 많이 고민을 해야했다. 어떻게 풀 것인가? 이 문제의 경우 처음에는 LinkedList로 풀었다가 크게 얘를 먹었다. 시간초과가 계속해서 발생했고, 해결법을 찾지못해서 다른 분의 블로그를 참조하였다. https://minhamina.tistory.com/17 [백준 ..

BaekJoon

[백준 알고리즘] 1347번 미로 만들기(Java) 문제 풀이

2 초 128 MB 2911 1534 1308 53.983% 문제 홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍준이는 미로에서 모든 행과 열의 이동할 수 있는 칸을 걸어다녔다. 그러면서 자신의 움직임을 모두 노트에 쓰기로 했다. 홍준이는 미로의 지도를 자기 노트만을 이용해서 그리려고 한다. 입력으로 홍준이가 적은 내용을 나타내는 문자열이 주어진다. 각 문자 하나는 한 번의 움직임을 말한다. ‘F’는 앞으로 한 칸 움직인 것이고, ‘L'과 ’R'은 방향을 왼쪽 또는 오른쪽으로 전환한 것이다. 즉, 90도를 회전하면서, 위치는 그대로인 것이다. 입력 첫째 줄에 ..

BaekJoon

[백준 알고리즘] 1072번 게임(Java) 문제 풀이

2 초 128 MB 37727 8934 6601 23.770% 문제 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시작했다. 의심을 피했다고 생각한 형택이는 다시 게임을 켰다. 그 때 형택이는 잠시 코딩을 하는 사이에 자신의 게임 실력이 눈에 띄게 향상된 것을 알았다. 이제 형택이는 앞으로의 모든 게임에서 지지 않는다. 하지만, 형택이는 게임 기록을 삭제 할 수 없기 때문에, 자신의 못하던 예전 기록이 현재 자신의 엄청난 실력을 증명하지 못한다고 생각했다. 게임 기록은 다음과 같이 생겼다. 게임 횟수 : X 이긴 게임 : Y (Z%) Z는 형택이의 ..

Android/Study

[Android] Retrofit

Retrofit이란 Retrofit은 안드로이드 앱에서 RESTful API와 통신할 때 사용되는 라이브러리 중 하나입니다. Retrofit은 Square Inc.에서 개발된 오픈 소스 라이브러리로, 안드로이드 앱 개발을 위한 RESTful API 호출을 간편하게 처리할 수 있습니다. Retrofit은 앱에서 서버로 HTTP 요청을 보내고, 응답을 처리하며, JSON으로 직렬화하는 작업들을 자동화합니다. 또한, Retrofit은 OkHttp 라이브러리를 기본 HTTP 클라이언트로 사용하므로, 높은 성능과 안정성을 보장합니다. Retrofit은 앱에서 API를 호출할 때 필요한 여러 기능을 제공합니다. 예를 들어, Retrofit은 API URL 및 요청 파라미터를 구성하고, 요청 본문을 구성하고, API..

Computer Science/Linux

[Linux] Linux(리눅스) 란?

리눅스란? 리눅스(Linux)는 오픈 소스 운영 체제(OS) 중 하나로, 컴퓨터 하드웨어와 소프트웨어 리소스를 관리하고 사용자와 프로그램 간의 인터페이스를 제공합니다. 리눅스는 프로그램 개발, 웹 서버, 데이터베이스 서버 등의 다양한 용도로 사용되며, 안정성, 보안성, 유연성 등의 장점을 가지고 있습니다. 리눅스는 UNIX 운영 체제에서 영향을 받아 개발된 운영 체제입니다. 리눅스는 UNIX와 유사한 명령어와 파일 시스템을 사용하며, 다중 사용자 및 다중 작업 환경을 지원합니다. 또한, 소스 코드 공개 및 수정이 자유롭기 때문에 개발자들에게 인기가 높습니다. 리눅스는 다양한 배포판(Distribution)으로 제공되며, 대표적으로 Ubuntu, CentOS, Debian, Fedora 등이 있습니다. 각..

Computer Science/Network

[Network] TCP와 UDP

TCP(Transmission Control Protocol) TCP(Transmission Control Protocol)는 인터넷 프로토콜 스택에서 가장 많이 사용되는 전송 계층 프로토콜 중 하나입니다. TCP는 연결 지향적인 프로토콜로, 전송할 데이터를 패킷 단위로 나누어 순서에 맞게 전송합니다. TCP는 전송할 데이터를 여러 개의 패킷으로 분할하고, 각 패킷에 일련번호(sequence number)를 부여하여 전송합니다. 수신자는 이 일련번호를 기반으로 패킷을 받은 순서대로 재조립합니다. 이때, 송신자는 각 패킷 전송 후, 수신자로부터 확인 응답(ACK) 메시지를 받으면 다음 패킷을 전송합니다. 만약 일정 시간 동안 수신자로부터 ACK 메시지가 도착하지 않으면 해당 패킷을 재전송합니다. 이러한 절..

Android/Study

[Android] MVI 패턴이란?

MVI 패턴이란 Android MVI 패턴은 Model-View-Intent의 약자로, 안드로이드 앱 개발에서 사용되는 아키텍처 패턴 중 하나입니다. MVI 패턴은 기존의 MVP, MVVM 등 다른 패턴과는 다르게 데이터 흐름이 단방향으로만 흐르는 것이 특징입니다. 뷰에서 인텐트를 발생시켜 모델에 전달하고, 모델에서 처리한 결과를 다시 뷰로 전달하는 방식으로 동작합니다. MVI 패턴에서는 상태를 중심으로 구성됩니다. 앱의 상태를 변경하는 인텐트는 불변의 데이터 구조로 구현되며, 상태 변화를 처리하는 모델 역시 불변의 데이터 구조로 구현됩니다. 뷰는 상태를 표시하기 위해 불변의 데이터 구조를 이용합니다. 이러한 구조는 다양한 이점을 가지고 있습니다. 불변의 데이터 구조를 사용하므로 코드의 안정성이 높아지고..

Computer Science/Algorithm

[Algorithm] 내가 지금 현재 풀고 있는 알고리즘 사이트

지금 현 상황 2023년 5월 4일(목) 내가 풀고 있는 알고리즘 사이트에 대해서 정리를 하여보자. 백준알고리즘 백준알고리즘 사이트이다. 내가 지금 현재 가장 주력으로 풀고있다. 앞으로 졸업까지 목표는 1000문제를 푸는 것이다.(할 수 있을까...) 내가 가장 좋아하는 사이트이다. 프로그래머스 프로그래머스이다. 최근에 네이버, 삼성 코테를 보면서 프로그래머스 또한 풀어야겠구나를 느꼈다. 특히나 네이버 코테때는 프로그래머스 환경에 익숙해져야함을 느꼈다. 목표는 lv3까지는 다 푸는 것이다. 삼성 SwExpertAcademy 최근에 다시 풀기 시작한 사이트이다. 삼성의 출제방식이랑 최대한 비슷해서 풀고있다. 삼성을 갈 수 있으나 모르겠다....

BaekJoon

[백준 알고리즘] 14502번 연구소(Java) 문제 풀이

2 초 512 MB 80904 46511 25781 54.826% 문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1..

Tenacity_Dev
인성의 개발 공부 노트