전체 글 88

14891번 톱니바퀴

14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다. 이때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다. 톱니바퀴를 회전시키려 www.acmicpc.net deque를 이용하면 쉽게 접근할 수 있는 문제 두 가지 사항을 고려했다. 1. 특정 톱니바퀴에 대한 시계방향 회전 function, 반시계방향 회전 function 2. 각 톱니바퀴와 맞물린 톱니바퀴..

코딩문제 풀이 2020.01.21

14888번 연산자 끼워넣기

14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. www.acmicpc.net 또또 브루트포스 문제이다. 삼성역량테스트에는 브루트포스문제가 단골로 등장하나보다. 대부분의 브루트포스 문제는 N과M 시리즈를 참조할 수 있으니 브루트포스가 감이 잡히지 않는다면 꼭 다 풀어보자. 숫자와 그 사이에 끼워넣을 연산자가 입력으로 주어지면 연산자 순서를 이리저리 바꾸면서 계산할 수 있는 값의 최대 최소를 구하면 된다. 이번 문제는 크게 두 부분으로 나누자면..

코딩문제 풀이 2020.01.17

14889번 스타트와 링크

14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 전형적인 브루트포스 문제. 이전에 풀었던 N과 M문제를 참조하였다. 1. N명의 선수를 두 팀으로 나누기 : n C n/2 2. 각 팀을 2인1조로 구성하여 총 전력을 구하기 : n/2 C n 크게 두 분으로 나뉘어 있다. 막혔던 부분은 브루트포스 재귀문을 이용해 어떻게 두 팀을 동시에 구성할 것이냐에 관한 것이었다. 재귀를 돌릴 때마다 start팀과 link팀에 동시에 완전탐색을 통한 팀구성을 해야하나 싶었지만 두 팀은 배타적이기 때문에 한 팀의 정보만 저장해주면 다른 팀의 구성원도..

코딩문제 풀이 2020.01.16

14503번 로봇 청소기

14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음 www.acmicpc.net 처음봤을 때 조건이 너무 헷깔리는 문제였다. 관련 질문글을 봐도 문제 정정요청이 수두룩한 문제... 구조체에 로봇의 위치와 방향에 관한 정보를 저장하는 것은 필수이다. 본 코드의 핵심은 입력된 좌표..

코딩문제 풀이 2020.01.15

백준 14502번 연구소

14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. www.acmicpc.net 구조는 간단하지만 상당히 까다로웠던 문제. 문제는 크게 두 부분으로 나뉜다. 1. 연구소의 벽 세우기 2. 바이러스 퍼뜨리기 처음에 문제를 접했을 때 완전탐색(브루트포스)를 숙지하지 않았기 때문에 벽을 어떻..

코딩문제 풀이 2020.01.14

백준 14890번 경사로

https://www.acmicpc.net/problem/14890 반복문의 iterator 조작이 까다로운 문제. 평지는 생략하고 높이가 바뀌는 블록을 기준으로 오르막길과 내리막길 각각의 조건이 맞는지 잘 따져야 한다. #include #include #include using namespace std; int map[101][101]; bool visited[101]; int N, L, path; void checkRow(int x) { int cur = map[x][0]; //visited[0] = true; int depth = -1; for (int i = 0; i < N; i++) { if (cur != map[x][i]) { //visited[i] = true; if (abs(cur - ma..

코딩문제 풀이 2020.01.08

공공데이터포털 Open API 사용하기 下 - 코드 예시

이전 시간에서 숙지한 명세서 읽는 법을 통해 파이썬으로 API를 출력하도록 해본다. 오늘의 목표는 노선 번호로 검색하여 / 그 노선의 버스가 경유하는 정류소 목록 뽑기 이다. 왜 슬러시로 두 부분으로 나눴을까? '노선 번호로 검색하여'와 '그 노선의 버스가 경유하는 정류소 목록 뽑기' 에 총 두 개의 API를 사용할 것이기 때문이다. 하나의 API가 모든 정보를 전부 제공해준다면 정말 편리하겠지만 보통 공공데이터포털의 API간에 관계가 서로 의존적이기 때문에 어떤 API에서 얻은 값이 다른 API의 입력값으로 요구되는 경우가 많다. 후자인 그 노선의 버스가 경유하는 정류소 목록 뽑기의 파라미터부터 확인하자 아무래도 우리가 필요로 하는 정보는 노선정보조회 서비스라는 API에서 찾을 수 있는 것 같다. 실행..

공공데이터포털 Open API 사용하기 上 - 명세서 읽기

자신이 개발할 서비스에 API가 필요하고, API가 무엇인지에 대해 알고 있지만, 공공데이터포털의 불친절함 때문에 API의 사용법이 궁금한 프로그래머가 이 글을 읽는다는 전제 하에 본인의 Ebu 개발 경험을 바탕으로 설명하고자 한다. 목표 : 정류소 이름을 검색하여 그 정류소에 관련된 정보를 얻고 싶다. 버스 정류소 관련 API를 얻기 위해 공공데이터포털에서 '정류소'라고 검색해보자 클릭하여 들어가면 이런 창이 덩그러니 뜬다. 일단 활용신청을 하고 서비스키를 받아놓자 그리고 마이페이지에서 신청한 API 목록을 확인한다. 스크롤을 쭉 내리면 자신이 신청한 상세기능정보와 참고문서가 보인다. 그리고 빨간 네모로 표시된 파일이 오늘 우리가 확인해야할 명세서이다. 명세서란 이름 그대로 우리가 사용해야할 API의 ..