728x90

전체 글 637

코틀린(Kotlin)에서 중첩 반복문 빠져나오는 방법

과거에 입문 언어로 선택되었던 언어들과 현재 많은 사람들이 쓸 줄은 아는 언어들, C, C++, Java 같은 것들은 중첩반복문을 빠져나오려면 별도의 플래그가 필요했다. 프로그래밍 자체에 서툰 사람들은 이 플래그 개념에서 헤매는 경우가 많았다. 적어도 필자 경험 상, 많은 학부생이 그랬다. 반복문이라는 것이 처음 접하는 사람에게는 어디까지 반복되는지 감이 잘 안 오는 제어문인 데다가, 제어문의 범위에 대해서 완벽히 숙지되지 않은 사람들에게는 반복문을 중단시키는 것 자체가 이해가 되지 않는 경우가 많다. 반복문 내부에 있는 반복문에서 break로 반복 작업을 중단시킨다고 하더라도, 그것을 둘러싸고 있는 반복문(여기서는 바깥 반복문이라고 하겠다.)을 중단시키는 것은 아니다. 따라서 바깥 반복문에 대해서 계속..

해시테이블(Hash Table)과 체이닝(Chaining)에 대한 간략한 정리

해싱과, 해시테이블 그리고 충돌을 처리하는 체이닝 기법에 대해서 한 번 정리해보자.이 글을 시작하기에 앞서, 스택오버플로우의 많은 자료들 그리고 위키피디아, 각종 유튜브 강의를 참고했다는 사실을 먼저 알립니다. 해시와 해시함수 해시 함수(Hash Function)는 데이터의 효율적인 관리를 위해 길이가 각기 다른 데이터를 고정 길이로 매핑하는 함수다. 이 때 매핑하는 과정을 해싱(Hashing)이라고 하며, 매핑하기 전의 데이터를 키(Key), 매핑 후의 데이터를 해시 값(Hash Value; 때로는 Value)이라 한다. 해시의 목적 해시 테이블(Hash Table)해시 테이블은 데이터의 해시 값을 테이블 내 주소로 이용해먹는 탐색 알고리즘으로, 잘 구현하면 이진 탐색보다 빠르게 처리할 수 있다. 암호..

백준] 4435- 중간계 전쟁(ACM-ICPC Regionals)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 전투의 개수 T가 주어진다. 각 전투는 두 줄로 이루어져 있다. 첫째 줄에 간달프 군대에 참여한 종족의 수가 주어진다. 이 값은 공백으로 구분되어 있으며, 호빗, 인간, 엘프, 드워프, 독수리, 마법사 순서이다. 둘째 줄에는 사우론 군대에 참여한 종족의 수가 주어진다. 이 값 역시 공백으로 구분되어 있으며, 오크, 인간, 워그, 고블린, 우럭하이, 트롤, 마법사 순서이다. 모든 값은 음이 아닌 정수이고, 각 군대의 점수의 합은 32비트 정수 제한을 넘지 않는다. 출력각 전투에 대해서, "Battle"과 전투 번호를 출력한다. 그 다음에 간달프의 군대가 이긴다면 "Good triumphs over Evil"를, 사우론의 군대가 이긴다면 "Evil ..

백준] 1652 - 누울 자리를 찾아라

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다. 출력첫째 줄에 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 개수를 출력한다. 소스코드#include #include #include using namespace std; int main(void) { int n, vertical = 0, horizontal = 0; cin >> n; vector room(n); for (int i = 0; i > room[i]; for (int i = 0; i < n; i++) { for (i..

백준] 2246 - 콘도 선정(ACM-ICPC Regionals)

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 콘도의 개수를 나타내는 자연수 N(1≤N≤10,000)이 주어진다. 다음 N개의 줄에는 각 콘도에 대한 정보를 나타내는 두 정수 D(1≤D≤10,000), C(1≤C≤10,000)가 주어진다. D는 그 콘도의 바닷가로부터의 거리를 나타내고, C는 그 콘도의 숙박비를 나타낸다. D와 C값이 서로 같은 콘도가 주어지지는 않는다. 출력첫째 줄에 후보가 될 수 있는 콘도의 수를 출력한다. 소스코드 #include #include using namespace std; int main(void) { int n, cnt = 0; bool check; cin >> n; vector arr(n); for (int i = 0; i > a..

Visual Studio 2017에서 설치 파일 만드는 방법

프로젝트 릴리즈 버전을 올리려고 하다 보니까 설치 파일이 필요해졌는데, 올릴 방법이 막막했다.다른 게시물들이나 이런 곳에서는 2017 이전의 버전으로 해서 그런지 기본적으로 기타 프로젝트라는 카테고리가 따로 존재해서 Setup Project를 만들 수 있었는데, 2017부터는 아무리 찾아봐도 그런 게 없다. 심지어 설치 시 누락된 건가 싶어 인스톨러를 실행해봤는데, 그건 아니었다. https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects Visual Studio 2017에서는 Setup Project를 기본 지원하지 않는다. 다만, 마이크로소프트에서 공식 확장..

코틀린(Kotlin)으로 작성한 안드로이드 블루투스 리모컨 예제

https://twinparadox.tistory.com/132 위 링크에 올린 블루투스 리모컨으로 조종하는 아두이노 선풍기에 어플리케이션 코드가 없었다. 프로젝트를 정리해 올리면서 아두이노 스케치 코드는 올렸는데, 어플리케이션 코드는 찾지 못해서 올리지 못한 상태였는데 최근 코틀린을 배우면서, 코틀린도 연습할 겸, 잃어버린 프로젝트의 주권(?)을 되찾을 겸, 리모컨을 다시 만들었다. 소스에 대해 간략히 설명하자면, SelectDeviceActivity는, 블루투스 장치를 검색 및 선택하는 액티비티고, ControlActivity는 해당 장치를 컨트롤하는 액티비티로, 여기서는 리모컨 역할을 하는 액티비티다. 깃허브 주소 : https://github.com/Twinparadox/ArduinoFan-wit..

백준] 2145 - 숫자 놀이(ACM-ICPC Regionals)

시간 제한 : 2초메모리 제한 : 128MB 입력각 줄에 숫자 N이 주어진다. N은 100,000보다 작은 양의 정수이다. 마지막 입력은 0이며, 0에 대한 결과는 출력하지 않는다. 출력한 줄에 하나씩 한 자릿수 결과를 출력한다. 소스코드 #include using namespace std; int main(void) { int n, tmp1, tmp2; while (1) { cin >> n; if (n == 0) break; while (n >= 10) { tmp1 = n, tmp2 = 0; while (tmp1 > 0) { tmp2 += tmp1 % 10; tmp1 /= 10; } n = tmp2; } cout

728x90