- Today
- Total
목록Programming (197)
개발하는 고라니
문제 링크 : https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단..
문제 링크 : https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로..
문제 링크 : https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1..
1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net [요구사항] 중복 제거 단어 길이 작은 순서대로 정렬 길이가 같다면 철자 순으로 정렬 Code - [Kotlin] fun main() { /* read/write 가능한 List 선언 */ val list = mutableListOf() /* readln()은 console 입력 */ for (i in 1..readln().toInt()) list.add(readln()) /** * distinct() -> 중복제거 * sortedWith() -> C..
대부분 개인적으로 프로젝트를 하거나, 공부를 하는 차원에서는 Git 혹은 Github에 대해 저장하고, 불러오는 용도로만 써도 무방했다. 하지만 필드에서 협업을 하게되면 어쩔 수 없이 '더 공부해야겠구나' 느끼게 된다. 그 이유는 회사마다 코드를 관리하는 정책이 다르기 때문이다. 예를 들어, A 회사는 pull(fetch + merge)로 하고, B 회사는 squash merge로 하고, C 회사는 rebase를 쓴다. 혹은 rebase와 merge를 섞어서 쓰기도 한다. 마찬가지 이유로 구체적인 정책이 정해지진 않아왔지만, 최근 들어 모든 팀이 동일한 정책을 사용하기로 맞추어 졌고, Rebase를 사용하기로 했다. 하지만 나는 rebase가 뭔지 모른다. 그래서 실습하며 배워보고자 한다. Rebase ..
코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr [DFS + 백트래킹] 시작 단어에서 목표 단어까지 최소 몇번의 변환을 거쳐 도달할 수 있는지에 대한 문제이다. 주어진 단어 배열의 각 원소를 하나의 정점(V)로 보고, 방문했는지에 대한 체크 값을 잘 사용하면 어렵지 않게 풀 수 있다. 코드가 그리 복잡하지 않고 주석이 있으므로 함께 보면 더 이해가 빠를 것 같다. Code package org.gorany.programmers.단어변환; class Solution {..
코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr [DFS + 백트래킹] 1) 도시에 각각 고유 번호를 부여해서 , 맵을 각각 만든다. 2) 도시 번호와 도시명이 있으니 티켓을 반복해 돌며 인접리스트를 만든다. 3) 탐색을 한다. /* * ticketSize = 주어진 티켓이 총 몇장인지? * size = 현재 티켓을 몇 장째 처리하고 있는지 * cur = 현재 방문하고 있는 도시의 번호 * */ static boolean DFS(int ticketSize, int size, ..
프로그래밍을 하다보면 동기와 비동기는 많이 들어보았을 것이다. 이때 동기는 흔히 'A가 B에게 작업을 요청했을 때, B의 작업이 끝날 때 까지 A가 기다렸다가 나머지 작업을 수행하는 것.' 반대로 비동기는 'A가 B에게 작업을 요청했을 때, B의 작업과 별개로 A의 나머지 작업을 다시 수행하는 것.' 으로 이해하고 있었다. 하지만 블로킹과 논블로킹의 개념을 접하고 나니 알고있던 것이 반은 맞고 반은 틀린(?) (사실 반이라도 맞는지 모르겠다) 사실이었다. 그래서 쉽사리 알기 힘든 개념이고, 앞으로 프로그래밍 하는데 있어 반드시 필요한 개념이라고 생각되어 동기와 비동기, 블로킹과 논블로킹의 개념을 정리해보고자 한다. Sync vs Async, Blocking vs Non-Blocking ※ 블로킹과 논블로..