전체 글399 [백준/BOJ] 2470번: 두 용액 문제 https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 해설 이분 탐색을 이용하여 해결할 수 있는 문제이다. 용액들의 특성값을 배열 혹은 리스트에 넣고, 이를 정렬시킨다. 이제 두 개의 포인터를 잡는다. 한개는 배열의 시작 위치인 0, 또 하나는 배열의 마지막 위치인 n - 1로 잡는다. list[start] + list[end]가 0보다 작다면, 두 수의 값이 0에 더 가까워질 수 있도록 start를 증가시켜준.. PS(Problem Solving)/BOJ 2022. 8. 19. [백준/BOJ] 3055번: 탈출 문제 https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 해설 각 맵에 입력되는 정보 당 상태를 보자. D: 비버 굴 .: 빈 공간 *: 물 S: 고슴도치 X: 돌 고슴도치는 비버 굴로 이동해야 하며 물 또는 돌이 있는 공간은 지나갈 수 없다. 또한 물은 1분마다 인접한 칸으로 번져나간다. 즉, BFS를 두번 실행시켜야 한다는 것이다. 우선 각 빈 공간에 물이 몇 분이 지났을 때 차는지를 구하는 BFS를 수행한다. 이 과정이 끝났다면, 몇 분 후에 칸에 물이 .. PS(Problem Solving)/BOJ 2022. 8. 18. [Android] AlertDialog를 이용한 알림 창 띄우기 AlertDialog(알림 창) 스마트폰을 사용하다 보면 여러 상황에서 다음과 같은 알림 창을 마주할 때가 있다. 이러한 알림창을 AlertDialog라고 한다. AlertDialog는 보통 사용자에게 어떠한 내용을 알려주고 어떠한 선택을 할 수 있게 하는 목적을 가지고 사용한다. 위의 사진을 보면 알 수 있듯이, AlertDialog는 크게 3가지 영역인 "제목", "내용", "버튼" 영역으로 나뉜다. 첫 번째 사진을 보면 내용과 버튼 영역만이 있는 것을 볼 수 있다. 제목 영역은 선택사항으로, 알림을 간단한 메시지 또는 질문을 나타내는 경우 생략하여도 된다. AlertDialog 생성 및 사용 AlertDialog를 생성하기 위해서는 AlertDialog.Builder를 사용한다. val alertD.. Android 2022. 8. 17. [Android] 화면 회전할 때 데이터 처리 Activity LifeCycle을 보면 Activity를 가로 세로 회전시킬 때 onDestroy() 호출되고, 다시 onCreate()가 생성된다. 즉, 종료됐다가 새로 생성되는 것이다. 이때 기존 Activity가 가지고 있던 데이터들은 당연히 사라지게 된다. 예를 들어 버튼을 클릭할 때마다 count 변수가 증가한다고 하자. 아무 처리없이 count를 어느 정도 증가를 시킨 후, 화면을 회전시키면 count는 0이 된다. 이를 화면에 뛰운다면 7이었던 count가 회전을 시켰더니 0이 화면에 보이게 된다는 것이다. 이를 해결하기 위한 방법은 2가지가 있다. Manifest 수정 onSaveInstanceState()와 onRestoreInstanceState() 사용 이 두가지 방법에 대해 알아보.. Android 2022. 8. 17. [백준/BOJ] 12893번: 적의 적 문제 https://www.acmicpc.net/problem/12893 12893번: 적의 적 첫 줄에 용재 주위 사람의 수 N(1 ≤ N ≤ 2,000)과 적대관계의 수 M(0 ≤ M ≤ 1,000,000)이 주어진다. 두 번째 줄부터 M개의 줄에 거쳐 서로 적대관계에 있는 사람의 번호 A, B(1 ≤ A, B ≤ N)가 주어진다. www.acmicpc.net 해설 A와 B가 적대 관계고 B와 C가 적대 관계라면, A와 C는 우호 관계가 된다. 이 때, C와 D가 적대 관계라면, A와 C가 우호 관계이고, B와 D가 우호 관계가 된다. 결론은 두개의 팀으로 나눈다는 것이다. 즉, 이분 그래프가 성립이 되는지 안되는지를 구하는 것이다. 이분 그래프의 설명은 이 글을 참고하면 좋다. 코드 import j.. PS(Problem Solving)/BOJ 2022. 8. 17. [백준/BOJ] 1707번: 이분 그래프 문제 https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 해설 처음 문제를 풀 때, 이분 그래프를 트리처럼 사이클이 없는 그래프라고 생각하였어서 계속해서 틀렸습니다가 떴다. 백준의 질문 검색을 통해 질문을 하였고, 금방 댓글이 달려 이분 그래프가 나의 생각과는 완전히 다르다는 것을 알고 이분 그래프에 대해 공부를 한 후 문제를 풀어보았다. 이분 그래프에 대한 설명은 이 글을 읽어보면 도움이 될 것이다. 이 문제에서 주의할 점은 특정 정점에서만 이분.. PS(Problem Solving)/BOJ 2022. 8. 16. [알고리즘] 이분 그래프(Bipartite Graph) 이분 그래프란? 정점을 두 그룹으로 나눌 수 있으면서, 같은 그룹끼리는 간선으로 이어지지 않은 그래프이다. 트리가 아닌 그래프이므로, 사이클이 있어도 상관없으나, 같은 색상의 정점끼리 연결은 있어서는 안된다. 간선이 단 한도 없고 정점만 있는 상태도 이분 그래프이다. 여기에서 알 수 있듯이, 모든 정점이 꼭 연결되있어야 하는 것이 아니다. 이분 그래프 구현 이분 그래프는 DFS 또는 BFS를 사용하여 구현할 수 있다. 나는 BFS가 더 익숙하여 BFS를 사용할 것이다. 백준의 1707번 이분 그래프 문제를 예시로 들어보자. import java.util.* import kotlin.collections.ArrayList private lateinit var color: IntArray private la.. Algorithm 2022. 8. 16. [Android] Fragment와 Fragment 생명 주기 Fragment란? Fragment = Activity + View라고 볼 수 있다. 즉, Activity의 개념과 View의 개념이 합쳐진 것이다. Activity와 View의 개념을 떠올려보자. View: 레이아웃, 위젯과 같이 액티비티 상에서 틀을 잡거나, 우리에게 보이는 버튼, 뷰 등등 Activity: View를 담을 수 있는 화면 그렇다면 Fragment는 무엇일까? Fragment는 Activity가 담을 수 있는 또 다른 화면이라고 생각하면 된다. 이제 다음과 같은 생각이 들 수 있다. "어? Activity와 Fragment가 둘 다 화면이라면 굳이 구분을 해야 할까? 그냥 Activity만 쓰면 안될까?" 이제부터 이 궁금증을 해결해보자. Activity는 Fragment에 비해 상당히.. Android 2022. 8. 15. [백준/BOJ] 2252번: 줄 세우기 문제 https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 해설 문제의 답이 여러 개일 수 있는 스페셜 저지 문제이다. 처음에 어떻게 푸나 고민하다, 위상 정렬을 이용해서 풀었다는 글들을 많이 보았다. 위상 정렬이란 "선후 관계가 정의되 있는 그래프 구조 상에서 그에 따라 정렬하는 방법"이다. 문제의 예제1을 보면서 위상 정렬의 과정을 봐보자. 위상 정렬에는 큐를 사용하고, 또한 그래프 구조 상에서 정렬하는.. PS(Problem Solving)/BOJ 2022. 8. 15. [Android] Activity LifeCycle(액티비티 생명주기) Activity LifeCycle Activity는 안드로이드 컴포넌트 중의 하나로, 애플리케이션의 가장 기본이 되는 구성 요소이다. 일반적으로 하나의 애플리케이션에는 여러 개의 액티비티가 사용된다. 예를 하나 들어보자. 현재 유튜브에서 영상을 보고 있는데, 전화가 와서 받았다고 하자. 이때 유튜브 영상은 일시 정지된 상태로 기다렸다가 통화가 마친 후 다시 전화 창에서 유튜브로 액티비티 전환이 일어나면 다시 시작할 수 있도록 해준다. 즉, 액티비티의 CallBack은 상태 변화에 적합한 특정 작업을 실행할 수 있게 해줌으로써, 상황에 맞는 적절환 전환을 처리하면 앱을 더 안정적으로 사용할 수 있다. 위의 과정을 차례대로 봐보자. 위에서도 예시로 들었던 유튜브, 전화로 또 한번 상황을 만들어보겠다. 사용자.. Android 2022. 8. 14. [백준/BOJ] 16234번: 인구 이동 문제 https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 해설 문제를 세분화해보자. 인구 이동이 더 이상 일어나지 않을 때까지 반복. 즉, 우선 무한 반복을 돌린다. 모든 나라를 bfs를 이용해서 연합이 가능한지 탐색한다.(dfs를 사용해도 된다.) 인접 국가와의 인구 차이가 l 이상 r 이하인 경우 연합을 맺는다. 연합 국가의 총 인원수를 갱신해준다. 연합 국가의 위치 정보를 저장해준다.(나는 전역으로 list를 선언해주었다.) 방.. PS(Problem Solving)/BOJ 2022. 8. 14. [Android] Toast Message(토스트 메세지) Toast란? 스마트폰을 사용하다 보면 종종 하단에 작은 메시지 박스가 뜨는 것을 볼 수 있다. 위처럼 모바일 네트워크에 연결이 될 때, 문자를 보낼 때 혹은 로그인에 실패했을 때 등등 작은 팝업으로 작업에 관한 내용을 제공해준다. 이러한 기능을 Toast(토스트)라고 한다. Toast Message 띄우기 Toast를 사용할 때는 Toast.makeText().show()의 형식으로 사용한다. 이때 makeText() 메서드에는 3개의 파라미터가 담겨있다. context: 사용할 어플리케이션의 활동 개체를 뜻한다. 보통 applicationContext를 사용한다. text: 사용자에게 표시될 텍스트 duration: Toast Message를 길게 또는 짧게 띄우는 것을 결정한다. Toast.LENG.. Android 2022. 8. 14. [Android] Intent란?, Intent를 이용한 화면 전환하기 Intent란? [Android] 안드로이드 컴포넌트(구성 요소) 안드로이드 앱 개발의 핵심은 컴포넌트이다. 종종 "액티비티 컴포넌트", "서비스 컴포넌트" 등 컴포넌트라는 용어가 자주 등장한다. 그렇다면 컴포넌트란 무엇일까? 컴포넌트란? 컴포넌트는 안 jjunsu.tistory.com 위의 글에서 안드로이드는 컴포넌트로 구성되어 있고, 이 컴포넌트에는 4가지 유형이 있다는 것을 공부했다. 이 4가지 유형이 어떤 것들인지 다시 한번 되짚어 보면 다음과 같다. Activity(액티비티) Service(서비스) Broadcast Receiver(브로드캐스트 리시버) Content Provider(콘텐츠 제공자) 이를 왜 다시 되짚어 봤을까? 바로 Intent가 각각의 컴포넌트 간의 통신을 맡고 있기 때문이다.. Android 2022. 8. 13. [백준/BOJ] 2665번: 미로만들기 문제 2665번: 미로만들기 첫 줄에는 한 줄에 들어가는 방의 수 n(1 ≤ n ≤ 50)이 주어지고, 다음 n개의 줄의 각 줄마다 0과 1이 이루어진 길이가 n인 수열이 주어진다. 0은 검은 방, 1은 흰 방을 나타낸다. www.acmicpc.net 해설 흔하게 볼 수 있는 BFS 문제이다. 미로를 탐색하며 도착점에 도달하기 위해 바꿔야하는 검은 방이 몇개인지 알아야 한다. 서로 붙어 있는 두 개의 흰 방 사이에는 문이 있어 지나다닐 수 있으므로, 상하좌우로 이동이 가능하다. 보통 BFS라면 방문 여부를 체크하는 배열이 있기 마련이다. 이를 통해 이미 방문했던 지점이라면 재방문을 하지 않도록 해준다. 하지만 난 이 문제에서 재방문을 허용해주었다. 모든 경우 재방문을 하는 것이 아닌, 벽을 바꾼 횟수가 .. PS(Problem Solving)/BOJ 2022. 8. 13. [백준/BOJ] 16202번: MST 게임 문제 https://www.acmicpc.net/problem/16202 16202번: MST 게임 첫 턴에 찾을 수 있는 MST는 총 5개의 간선 {(1, 3), (1, 2), (2, 4), (4, 6), (4, 5)}로 이루어져 있고, 비용은 16이다. 두 번째 턴에는 첫 턴에서 구한 MST에서 간선의 비용이 최소인 (2, 4)를 제거한 후 남아있 www.acmicpc.net 해설 제목에서부터 알 수 있듯이 MST를 응용하는 문제이다. 최소 신장 트리를 구하기 위해 크루스칼 알고리즘을 사용하였다. 문제에서 가장 중요한 문장은 아래 문장이다. 각 턴이 종료된 후에는 그 턴에서 구한 MST에서 가장 가중치가 작은 간선 하나를 제거한다. 결론적으로는 한 턴이 끝날 때마다 가장 작은 간선을 제거하여 k만큼 .. PS(Problem Solving)/BOJ 2022. 8. 12. [백준/BOJ] 2146번: 다리 만들기 문제 https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 해설 문제를 해결하기 위한 과정을 생각해보자. 섬을 구분한다. 각각의 섬을 연결할 때, 최소의 다리 수로 이어질 수 있도록 한다. 크게 두 가지로 나눌 수 있다. 1번 과정부터 보자. 입력에 육지인 부분은 1로 들어온다. 나는 섬을 1, 2, 3의 번호로 나눌 것이기 때문에, 1이 들어오면 -1로 저장을 해주었다. 모든 입력을 받은 후, 아직 방문하지 않은 육지인 곳이 있다면 bfs를 수행시켜준다.. PS(Problem Solving)/BOJ 2022. 8. 11. [백준/BOJ] 11779번: 최소비용 구하기 2 문제 https://www.acmicpc.net/problem/11779 11779번: 최소비용 구하기 2 첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스 www.acmicpc.net 해설 https://jjunsu.tistory.com/249에서 했던 1916번: 최소비용 구하기 문제의 상위 버전이다. 최소 비용을 구한 후, 몇 개의 도시를 거쳤는지, 어떤 도시를 방문했는지를 같이 출력해야 한다. 최소 비용을 구하는 방법은 위 문제와 같이 다익스트라 알고리즘을 사용하여 구하면 된다. 이제 어떠한 도시를 거쳤는지 경로를 알아야 한다. 어렵게.. PS(Problem Solving)/BOJ 2022. 8. 10. [Android] Android Naming Convention(안드로이드 네이밍 컨벤션) Naming Convention 코드 컨벤션 중 하나이다. 소스 코드와 문서에 있는 변수명, 타입, 함수명 등의 식별자에 사용되는 문자열을 정할 때 사용되는 규칙이다. 각각의 언어, 프로젝트, 개발 도구에 따라 다르다. 3번째에서 알 수 있듯이, 네이밍 컨벤션은 안드로이드에서 뿐만 아니라 다른 언어에서도 쓰이며, 각각 다른 규칙을 가지고 있다. 네이밍 컨벤션의 주목적은 가독성을 높이는 것이다. 이를 사용함으로써 협업을 할 때, 팀원 또는 자신이 다른 사람이 작성한 코드를 보다 빠르게 이해할 수 있으며, 팀의 생산성과 효율성을 증가시킬 수 있다. 꼭 협업을 하지 않더라도, 자신의 코드를 관리하기에도 필요하다. 그럼 안드로이드의 네이밍 컨벤션에 대해서 알아보도록 하자. 안드로이드에서의 네이밍 컨벤션은 XML.. Android 2022. 8. 9. [백준/BOJ] 1956번: 운동 문제 https://www.acmicpc.net/problem/1956 1956번: 운동 첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의 www.acmicpc.net 해설 플로이드 와샬 알고리즘을 사용하여 해결할 수 있는 문제이다. 우선 초기값을 설정할 배열을 map이라 하자. map을 INF(100000000)으로 초기화해주었다. 이후 플로이드 와샬 알고리즘을 수행하여 각 정점에서 각 정점까지의 최단 경로를 구해준다. 플로이드 와샬 알고리즘의 수행이 끝났다면, 사이클을 찾아야 한다. map[i][j]와 map[j][i].. PS(Problem Solving)/BOJ 2022. 8. 9. [백준/BOJ] 2458번: 키 순서 문제 https://www.acmicpc.net/problem/2458 2458번: 키 순서 1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여 www.acmicpc.net 해설 플로이드 와샬 알고리즘을 사용해서 문제를 해결하였다. 초기값을 저장할 배열을 BooleanArray로 선언하여 입력으로 알 수 있는 학생들끼리의 관계를 true로 해준다. 이 때 배열[i][j] = true라면, i가 j보다 작다가 되고, 배열[j][i] = true라면, j가 i보다 작다가 된다. 플로이드 와샬 알고리즘을 수행하며, 배열[i][k]와 배열[k][j]가 모두 참일 시, 배.. PS(Problem Solving)/BOJ 2022. 8. 9. 이전 1 ··· 4 5 6 7 8 9 10 ··· 20 다음 728x90