본문 바로가기

전체 글123

[백준 19235] 모노미노도미노 (C++) A. 문제설명 www.acmicpc.net/problem/19235 19235번: 모노미노도미노 모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다. 게임에서 사용하는 좌표 (x, y)에서 x는 행, www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 빨간/파란/초록색 보드가 붙어있는 형태의 배열판이 존재 2. 그리고 게임에서는 아래와 같은 형태의 1*1, 2*1, 1*2 크기의 블록을 사용 3. 게임의 규칙은 1번의 그림과 같이 빨간색에 먼저 블록이 배치되고, 해당 도형이 테트리스의 규칙과 같이 파란/초록색 영역으로 우선 이동 4. 도형은 빨간색 영역에 배치된 모양을 유지하여 횡/.. 2020. 9. 30.
[백준 3987] 보이저 1호 (C++) A. 문제설명 www.acmicpc.net/problem/3987 3987번: 보이저 1호 첫째 줄에 시그널을 보내는 방향을 출력한다. (U: 위, R: 오른쪽, D: 아래, L: 왼쪽) 만약, 방향이 여러 가지가 존재한다면, U, R, D, L의 순서 중 앞서는 것을 출력한다. 둘째 줄에는 가장 긴 시간을 출� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 N*M 배열판이 존재 2. 배열 내 각 엔트리에는 C(블랙홀), .(빈 공간), / \(행성)이 각각 존재 3. 보이저 1호에서 처음 출발위치에서 시그널을 동서남북의 방향으로 보내 전파시키려고 함 4. 여기서, 시그널이 / \(행성)을 만나면 아래 그림과 같이 방향을 전환하게 됨 5. 그 외에 빈공간을 만나면 방.. 2020. 9. 30.
[백준 19238] 스타트 택시 (C++) A. 문제설명 www.acmicpc.net/problem/19238 19238번: 스타트 택시 첫 줄에 N, M, 그리고 초기 연료의 양이 주어진다. (2 ≤ N ≤ 20, 1 ≤ M ≤ N2, 1 ≤ 초기 연료 ≤ 500,000) 연료는 무한히 많이 담을 수 있기 때문에, 초기 연료의 양을 넘어서 충전될 수도 있다. 다 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 N*N 배열판이 존재(흰색이 빈칸, 회색이 벽) 2. 택시 운전자가 M명의 승객을 각각의 목적지에 데려다 주려함 3. M명의 승객들 중, 태울 손님을 고르는 기준은 가장 최단거리, 만약 최단거리인 손님이 여러명이면 최상위 행을 우선으로, 그래도 여러명이면 최좌측 열을 우선으로 선택 4. M명의 승객은 동.. 2020. 9. 21.
[백준 19237] 어른 상어 (C++) A. 문제설명 www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 N*N 배열판 위에 M마리의 상어가 주어짐 2. 각 상어는 1~M번 번호로 구분되어 초기 위치와 방향이 주어짐 3. 맨 처음에는 모든 상어가 자신의 위치에 자신의 냄새를 뿌림 4. 그 후 1초마다 모든 상어가 동시에 상하좌우로 인접한 칸 중 하나로 이동하고, 자신의 냄새를 그 칸에 뿌림 5. 냄새는.. 2020. 9. 21.
[백준 17825] 주사위 윷놀이 (C++) A. 문제설명 www.acmicpc.net/problem/17825 17825번: 주사위 윷놀이 주사위 윷놀이는 다음과 같은 게임판에서 하는 게임이다. 처음에는 시작 칸에 말 4개가 있다. 말은 게임판에 그려진 화살표의 방향대로만 이동할 수 있다. 말이 파란색 칸에서 이동을 시작하면 � www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 아래와 같은 윷놀이 판과 말 4개가 주어짐 2. 각 말들은 화살표가 주어진 위치로만 이동이 가능하며, 파란색 화살표가 있는 위치에 도달할 경우 파란색 화살표가 가리키는 방향으로 이동 3. 게임은 10개의 턴으로 매 턴마다 주사위를 굴려 각 말들을 이동시키고, 말들은 다른 말이 있는 칸에는 이동할 수 없음 4. 말이 이동을 마칠때마다 해당 칸의 점수가 .. 2020. 9. 15.
[백준 17822] 원판 돌리기 (C++) A. 문제설명 www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. 반지름이 각기 다른 N개의 원판이 주어짐. 각 원판에는 M개의 정수가 적혀짐 2. 각 원판은 1,2, ... ,N번째 원판까지 안쪽부터 바깥쪽으로 끼워짐 3. 각 원판의 엔트리는 (i, j)와 같이 나타나며, 그 규칙은 아래와 같음 (i, 1)은 (i, 2), (i, M)과 인접하다. (i, M)은 (i, M-1), (i, 1)과 인접하다.. 2020. 9. 9.
[백준 17779] 게리맨더링 2 (C++) A. 문제설명 https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름�� www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*N 배열 크기의 땅이 존재 2. 각 배열의 엔트리를 5개의 지역구로 나누려고 함 3. 선거구를 나누는 방법은 아래와 같음 기준점 (x, y)와 경계의 길이 d1, d2를 정한다. (d1, d2 ≥ 1, 1 ≤ x < x+d1+d2 ≤ N, 1 ≤ y-d1 < y < y+d2 ≤ N) 다음 칸은 경계선이다. (x, y), (x+1, y-1).. 2020. 9. 5.
What is Type-safe? Type Safety에 대한 정의에 대해 완전한 이해를 위해 포스팅을 준비하던 중, PL Enthusiast 블로그에서 너무 좋은 글을 찾게 되었다. 따로 정리할 필요없이 본 포스팅에서는 해당 글에 대한 이해와 번역을 한글로 정리한다. Type Safety는 잘 이해되는 개념이지만, 쉽게 고정되는 개념은 아니다. 특히 누군가 "JAVA는 Type-safe한 언어다."라고 하면 이는 정확히 무엇을 의미하는가? 모든 종류의 Type-safe한 언어들은 어떤 면에서 "같다"고 볼 수 있는가? Type-safe의 개념은 특정 언어에서, 그리고 일반적으로 어떻게 받아들여지는가? 사실, Type Safety의 개념은 해당 언어의 타입 시스템의 정의에 따라 달라진다. 가장 간단한 예시로, Type Safety는 프로.. 2020. 9. 5.
C++ 키워드 정리 • volatile volatile 키워드는 컴퍼일러의 최적화를 제한하는 역할을 한다. volatile(휘발성)이라는 뜻 그대로 언제든지 그 값이 변할 수 있음을 명시하는 키워드이다. volatile로 지정된 변수는 최적화를 수행하지 않게 된다. 주로 메모리 맵 입출력(MMIO)를 제어할 때, volatile을 사용하여 컴파일러 최적화를 제한한다. 최적화 이전 최적화 이후: 0 != 255는 블록 내에서 true이므로 최적화되어 무한 루프에 빠진다. volatile 사용: 변수 foo에 volatile 키워드를 지정하여, 최적화를 막을 수 있다. • restrict restrict 포인터는 메모리 접근에 관련된 최적화 기능이다(C99 표준). restrict 포인터는 컴파일러에게 최적화를 하라고 알려준다.. 2020. 9. 5.
JAVA JIT 컴파일러 JAVA 프로그램은 여타 언어들처럼 프로그램 → 컴파일러(최적화) → 네이티브 코드이나, 프로그램 → 인터프리터(직접실행) 방식이 아닌 프로그램 → 컴파일러 → 가상머신(최적화 및 직접실행)의 방식으로 실행된다. 그 중에서 눈여겨 볼 수 있는 것은, 바로 실행시간 최적화를 하는 JIT 컴파일러인데, 오늘은 이에 대해 다루어본다. 개괄 JIT(Just-In-Time) 컴파일러는 런타임시 .class 바이트 코드를 네이티브 코드로 컴파일하여 JAVA 응용 프로그램의 성능을 향상시키는 런타임 환경의 구성 요소이다. 자바 프로그램은 여러 컴퓨터 아키텍처 환경에서 JVM이 해석할 수 있는 플랫폼 중립(platform-neutral)적인 바이트 코드를 포함하는 클래스로 구성된다. 런타임에 JVM은 클래스 파일을 로.. 2020. 9. 5.
C++ 코딩 스타일 개발시 프로그램 성능이나 개발시간 뿐 아니라 코드를 일관된 스타일로 잘 작성하는 것도 매우 중요하다. 본 포스팅에서는 C++ 코딩 스타일에 대해 다룬다. • Part 1: Style 스타일 가이드라인은 생각보다 엄격하지 않다. 중요한 것은 적절한 공백과 일관된 스타일을 유지하여 이해하기 쉬운 코드를 짜는 것이다. 명시적이고 일관적인 네이밍 1. CamelCase 2. snake_case 이 둘은 가장 일반적으로 많이 사용되는 네이밍 스타일이다. 네이밍 스타일 뿐만 아니라 선택 단어 역시도, 선언되는 변수/함수의 기능을 명확하게 잘 드러낼 수 있도록 하자. 일반적인 C++ 네이밍 컨벤션 1. 타입의 첫 글자는 대문자로 한다 : MyClass 2. 함수와 변수의 첫 글자는 소문자로 한다 : myMethod .. 2020. 9. 5.
비주얼 스튜디오 동생, VS Code OS-independent하게 사용하기 편리한 에디터 겨울동안 잠시 회사에 들어가 C++로 개발을 하게 되었는데, 회사 컴퓨터인 윈도우 머신과 내 노트북인 리눅스 머신을 동시에 돌리게 되었다. 두 환경에서 적절하게 잘 동기화 시키며 사용할 개발 환경이 필요하게 되었는데, 이를 계기로 VS Code를 사용하게 되었다. VS Code는 이름 그대로 Visual Studio의 코드 에디터 버전 정도로 이해할 수 있다. 하지만, 그 정도로 이해하기엔 VS와는 차이점이 많다. 일단, VS Code는 IDE가 아닌 코드 에디터이고, 플러그인과 여러 설정을 통해 개발 환경을 구축 가능하지만, 기본 기능은 상당히 가벼운 편이다. VS Code는 가볍지만 추가할 수 있는 기능들 중에 강력한 것들이 많아서, 일반적인 Vi.. 2020. 9. 5.
Why OCaml? 이 발표에서 야론 민스키는 제인 스트릿이라는 회사에서 왜 오캐믈이라는 변방의 언어로 모든 시스템을 구축하고 개발하게 되었는가를 설명한다. 먼저 그는 일반적인 프로그래밍 언어를 4개의 범주로 나누어 설명한다. 아래와 같이 좌측 열 위쪽에 있는 언어들은 파이썬, PHP 같은 언어들인데 이들은 일반적으로 스크립트 언어라고 불리우는 것들로, 짜기 쉽고 간편하지만 컴파일되는 언어가 아니라 컴파일 되는 언어보다 속도가 매우 느리다는 단점이 있다.(언어의 종류에 따라서는 100배까지도!) 그에 반면 좌측 열 아래쪽에 있는 언어들은 C#, 자바같은 일반적인 언어들인데, 이들은 컴파일되어 빠르고 좋은 성능을 가지는 언어인 것을 보여준다. 여기서, 좌측열과 우측열의 명령형 언어와 함수형 언어를 구분하는 차이점은 함수형 언.. 2020. 9. 5.
Linux PATH 지정하기 PATH의 정의 PATH는 리눅스와 다른 유닉스 계열 운영체제의 환경 변수로, 사용자가 발행 한 명령에 응답하여 실행 파일 (즉, 즉시 실행할 수있는 프로그램)을 검색 할 디렉토리를 쉘에게 알려준다. PATH는 이러한 운영 체제의 가장 중요한 단일 환경 변수로 간주되어진다. 출처 : linfo.org PATH 등록 및 확인 리눅스 시스템의 환경변수인 PATH는 배쉬에서 echo $PATH로 확인할 수 있는데, 나의 PATH 목록은 다음과 같다. :를 기준으로 여러개 디렉토리들의 절대경로들이 등록되어 있는데, 이중에서 usr/bin/의 경우는 시스템에서 자동으로 등록한 디렉토리이다. usr/bin/은 셸에서 사용하는 실행가능한 바이너리들이 들어있는 디렉토리인데, 아래와 같이 배쉬에서 부를 수 있는 여러 셸.. 2020. 9. 4.
프로그램 분석에서의 Soundness PL에서 Soundness와 Completeness는 자주 언급되는 개념이다. 하지만 이에 대한 정의는 일정하게 사용되지 않는 양상을 보여, 가끔 혼동을 주기도 한다. 그리고, 정적분석에 대해서 Sound(안전하다), Complele(완전하다), 혹은 Soundy(적당히 안전하다)라는 개념 또한 고려해 보아야할 것이다.정적분석에서의 Soundness(안전성) Soundness의 개념은 형식적인 수학 논리 모델에서 온 것이다. 어떤 증명 시스템과 모델이 있다고 가정하자. 증명 시스템은 성질들을 증명할 수 있는 규칙들의 집합이고, 이는 수학적인 구조를 가진다. 증명 시스템 L이 증명하는 모든 statement들이 true라면 Sound하다고 할 수 있다. 그리고 L이 모델에 있는 모든 true인 statem.. 2020. 9. 4.