문제 문제 바로가기> BOJ 15684번: 사다리 조작 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 풀이 ** 시간 초과 방지를 위한 Tip ** 1. h번 가로선에서 사다리를 조작한 경우, 그 다음 조작할 사다리는 h번 가로선 부터 찾아가면 된다. → 이미 앞에서 계산했으므로 ! (이 부분이 중요 ) 2. 가로선을 연속해서 나란히 놓을 필요가 없기 때문에, `isLine[a][b] || isLine[a][b+1] || isLine[a][b-1]` 다음 중 하나라도 해당 된다면, 가로선을 놓을 필요가 없다..
문제 문제 바로가기> BOJ 17779번: 게리맨더링 2 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 풀이 얼핏 보면 조건이 굉장히 까다로워 보이지만,, 사실 문제에서 경계의 범위를 다 주고 있기 때문에,, 그대로 조건식만 넣어주면 된다! 사실 개꿀인 ㅎ 나름 중요한 포인트? 가 있다면, 5번 구역의 경계를 먼저 설정해 두고, 그 경계만 침범?하지 않도록 해주면 된다! 이 후 `모든 인구 수 - 1,2,3,4 지역 인구` 를 해주면 5번 구역 인구도 쉽게 구할 수 있다!! 아무래도 그림으로 보면 이해가 더 쉬울 ..
문제 문제 바로가기> BOJ 17140번: 이차원 배열과 연산 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 1. rnum(행개수) , cnum(열 개수) 변수를 이용하여 어떤 연산을 해야하는지 파악한다. * R 연산을 할 때 -> cnum 이 update * C 연산을 할 때 -> rnum 이 update 2. (등장 횟수, 숫자)를 조건에 맞게 정렬하기 위해, DATA 구조체 내에서 비교 연산자를 재정의한다. * java의 경우 Data class를 만들고, Comparable 인터페이스..
문제 문제 바로가기> BOJ 17142번: 연구소 3 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 풀이 1. 조합을 구현하여, 바이러스 M개를 활성 상태로 변경 2. BFS를 이용하여 바이러스가 모두 퍼지는 시간을 구하고, ans 값 갱신 * 비활성 바이러스 → 활성화 될 때는 바이러스가 퍼지는 시간으로 계산 x ( = 값 update x ) * 빈 칸에 바이러스가 퍼지는 것은 바이러스를 퍼뜨리는 데 걸린 시간에 영향을 주지만, 비활성화된 바이러스가 있는 곳으로 바이러스가 퍼지는 것은 바이러스를 퍼뜨리는 데 걸린 시..
문제 문제 바로가기> BOJ 16235번: 나무 재테크 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 풀이 C++ 나이가 어린 나무부터 양분을 먹기 위해서 priorityQueue가 아닌, deque에 앞에 새로 번식한 나무를 넣어주는 방식으로 문제를 풀었다. 초기 입력 위치는 모두 다르고, 나이는 1씩 증가하므로, 이렇게 하면 정렬할 필요가 없어져서 시간 초과를 방지할 수 있다! #include #include #define MAX 11 using namespace std; int N, M,..
문제 문제 바로가기> BOJ 16234번: 인구이동 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 풀이 문제의 요구사항을 구현해주면 되는 간단한 문제였다. 1. 연합을 구하기 위해 그래프 탐색 (DFS or BFS) 진행 2. 연합의 크기 > 1 인 경우, 인구 이동 연합의 크기 < 1 인경우, break ; 정답 출력 크게 위와 같은 2가지 과정으로 이루어지는데, 연합을 구하기 위해 DFS를 사용했을 때가 BFS를 사용했을 때 보다 시간이 훨씬 줄어들었다. 그 이유를 찾아보니 ... DFS함수..
문제 문제 바로가기> BOJ 15685번: 드래곤 커브 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 풀이 드래곤 커브를 살펴보면, 규칙이 있는데, 다음 세대에 추가되는 선분의 방향 = `(이전 세대의 방향 정보를 역순 탐색 + 1) % 4` 를 한 것이 된다. 따라서 해당 규칙에 맞추어서 구현해주었다! 주의할 점은 역순으로 꺼내서 이어 붙어줘야 하는 것인데, 이 부분은 예제를 살펴보면 쉽게 이해할 수 있을 것 같다. C++ #include #include #define MAX 10..
UML (Unified Modeling Language) 시스템을 모델로 표현해주는 대표적인 모델링 언어 UML 목적 전체 시스템의 구조 및 클래스의 의존성 파악 유지보수를 위한 설계의 back-end 분석 제작 원활한 의사소통 및 설계 논의 시각화, 명세화, 문서화 UML 다이어그램 종류 1. 구조 다이어그램 (Structure Diagram) 클래스 다이어그램 (시스템을 구성하는 클래스들 사이의 관계 표현) 객체 다이어 그램 (객체 정보를 보여줌) 복합체 구조 다이어그램 (복합 구조의 클래스와 컴포넌트 내부 구조 표현) 등등 2. 행위 다이어그램 (Behavior Diagram) 활동 다이어그램 (업무 처리 과정, 연산 수행 과정 표현) 상태 머신 다이어그램 (객체의 생명주기 표현) 유즈케이스 다이어..
문제 문제 바로가기> BOJ 17135번: 캐슬 디펜스 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 풀이 1. 조합을 구현하여 궁수의 위치를 선정한다. (`solution() 함수`) 2. 정해진 궁수의 위치를 기반으로, 다음을 과정을 반복한다. 궁수의 적 공격 - 공격할 적의 우선순위를 구하기 위해 , pq에서 사용할 ATTACK 구조체 내에서 bool operator를 재정의해주었다. - 모든 궁수는 동시에 공격하므로, 공격 위치를 vector에 넣어두었다가 한 번에 공격해주었다. (이때, 이미 제거한 적을 또 c..
JavaScript 란? HTML, CSS와 함께 웹을 구성하는 요소 중 하나로, 웹 브라우저에서 동작하는 유일한 프로그래밍 언어 컴파일 없이 한줄 한줄 해석하며 바로 명령어를 실행하는 인터프리터 언어 HTML의 특정 요소를 선택하여 다양한 이벤트(ex. 마우스 클릭)에 따라 특정 동작을 하도록 기능을 넣을 수 있음 사용 방법 내부 스크립트 <script>태그를 HTML문서안에 넣어서 사용 주로 <body> 아래에 사용 외부 스크립트 자바스크립트 파일을 `.js` 확장자 파일로 저장한 후 불러옴 기본 문법 주석 // 한줄 주석 /* 블록 주석 */ 변수 JavaScript는 변수를 선언할 때 타입을 명시하지 않고 var 키워드를 사용하여 선언 JavaScript는 동적타입(Dynamic / Weak Ty..
문제 문제 바로가기> BOJ 15683번: 감시 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 풀이 cctv의 개수가 최대 8개로 적은 편이다. 따라서 가능한 cctv 방향을 모두 시뮬레이션 해보면서, 브루트포스 방식으로 문제를 풀었다. 탐색 방향을 미리 `dir` 배열에 정해두고, 모든 cctv의 방향을 정했을 때, 시뮬레이션 해주면 된다. C++ #include #include #define EMPTY 0 #define WALL 6 #define MAX 10 using namespace std;..
문제 문제 바로가기> BOJ 17070번: 파이프 옮기기1 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 풀이 DFS 탐색을 통해 간단하게 해결할 수 있는 문제다! 1. 파이프의 마지막 부분(초기값 : (1,2))을 추적해가면서 DFS 탐색 진행 (가로, 세로, 대각선 이동 방법이 다름) 2. 종료 조건 : 범위를 벗어나는 경우, 빈칸이어야하는 부분인 벽인 경우 (범위를 벗어나는 경우를 확인할 때, N보다 큰지만 확인해주면 된다. 더하는 방향으로만 이동하기 때문!) 3. (N, N)에..
문제 문제 바로가기> BOJ 14501번: 퇴사 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이 dp를 이용해서, 뒤에서부터 거꾸로 오면서, 백준이가 얻을 수 있는 최대 수익을 구해 줄 수 있다. `dp[i]` : i+1 ~ N일 기간, 백준이가 얻을 수 있는 최대 수익 #include #include #define MAX 16 using namespace std; int N; int dp[MAX]; pair consult[MAX]; // time, pay void input(){ cin >> N; int t, p; for(int i=0; i> t >> p; consult[i] = {t, p}; } } void solution(){ for(i..
문제 문제 바로가기> BOJ 14891번: 톱니바퀴 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 풀이 문제에서 요구하는 대로 구현해주면 되는 간단한 문제였다! 1. 톱니바퀴가 맞닿은 극이 같은지, 다른지 판단하여 방향을 저장한다. 2. 저장해둔 방향대로 회전을 진행한다. 3. 점수를 계산한다. 다만,, 톱니바퀴 회전 전 방향을 저장하지 않고, 회전 후 바뀐 방향으로 비교하는 바람에 조금 헤맸다 ^^,, C++ #include #include #define MAX 4 #define SIZE 8 using ..
문제 문제 바로가기> BOJ 14890번: 경사로 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 2N 개의 길 모두를 살펴보면서 지나갈 수 있는 길의 개수를 세어주면 된다. 이때, 총 4가지 경우의 수가 있다. 1. 이전 칸과 높이가 같은 경우 ▶ 같은 높이의 칸을 세어주는 변수인 `cnt` 를 1 증가시켜준다. 2. 높이가 낮아지는 경우 (높이 차 = 1) ▶ 해당 칸을 제외하고, 앞으로 1-L개의 칸의 높이가 같아야, 경사로를 건설할 수 있다. 3. 높이가 높아지는 경우 (높이 차 = 1) ▶ 지금까지 L개 이상의 칸의 높..