BOJ

    1978번: 소수 찾기 (BOJ C++)

    1978번: 소수 찾기 사용 언어: C++ 풀이 아래의 코드는 O(n)이지만, O(루트n)에 코드를 짤 수 있다. 해당 숫자의 루트 n까지만 확인하면 된다는 사실을 사용하는 것이다. for(int i=2; i*i> num; bool flag; while(num--) { int isPrime; flag = true; cin >> isPrime; if(isPrime == 1) continue; for(int i=2; i

    1259번: 팰린드롬수 (BOJ C++)

    1259번: 팰린드롬수 사용 언어: C++ 풀이 #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); stack stack; while(1) { string a; cin >> a; if(a == "0") break; if(a.length() == 1) { cout

    2096번: 내려가기 (BOJ C++)

    2096번: 내려가기사용 언어: C++ 문제 N줄에 0 이상 9 이하의 숫자가 세 개씩 적혀 있다. 내려가기 게임을 하고 있는데, 이 게임은 첫 줄에서 시작해서 마지막 줄에서 끝나게 되는 놀이이다.먼저 처음에 적혀 있는 세 개의 숫자 중에서 하나를 골라서 시작하게 된다. 그리고 다음 줄로 내려가는데, 다음 줄로 내려갈 때에는 다음과 같은 제약 조건이 있다. 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다는 것이다. 이 제약 조건을 그림으로 나타내어 보면 다음과 같다.별표는 현재 위치이고, 그 아랫 줄의 파란 동그라미는 원룡이가 다음 줄로 내려갈 수 있는 위치이며, 빨간 가위표는 원룡이가 내려갈 수 없는 위치가 된다. 숫자표가 주어져 있을 때, 얻을 수 있는 최대..

    1504번: 특정한 최단 경로 (BOJ C/C++)

    1504번: 특정한 최단 경로 사용 언어: C++ 풀이 //1번 정점에서 시작, n번 정점으로 이동. //시작 정점이 주어지고 최단경로이므로 다익스트라 알고리즘을 활용하면 된다. //주어진 두 정점을 반드시 거쳐야한다. 만약 a, b 정점을 거쳐야한다면 // 1 -> a -> b -> n or 1 -> b -> a -> n 두 가지 경우만 구하면 된다. // 그러면 a와 b 각각에서 다익스트라를 돌리면 모든 값을 구할 수 있다. -> 다익스트라 두 번만 돌리면 된다. #include #include #include #include #define INF 1e9 using namespace std; int n, e; //n: 정점 개수, e: 간선 개수 int v1, v2; //거쳐야하는 정점 v1, v2 ..

    1753번: 최단경로 (BOJ C/C++)

    1753번: 최단경로 사용 언어: C++ 풀이 //우선 순위 큐를 이용한 다익스트라 알고리즘으로 최단경로 구하기 #include #include #include using namespace std; #define INF 1e9 int v, e, start; //V: 정점의 개수, E: 간선의 개수, start: 시작 정점의 위치 vector arr[20001]; //각 노드가 연결된 노드 정보 저장 //1번째 노드가 3번째 노드에 연결되어있다를 표현하려면 arr[1] int dist[20001]; //최단 거리 정보 저장 void dijkstra(int start) { priority_queue pq; // pq.push({0,start}); dist[start] = 0; while(!pq.empty()..

    1149번: RGB거리 (BOJ JAVA)

    1149번: RGB거리 사용 언어: JAVA 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 ..

    1043번: 거짓말 (BOJ JAVA)

    1043번: 거짓말 사용 언어: JAVA 풀이 파티에서 진실을 아는 사람을 좀비라 생각하고, 좀비와 같은 파티에 간 사람은 감염된다고 생각했다. 이 문제에 다시 와서 parent 함수, find-union으로 더 간단한 풀이를 만들어야겠다. //진실을 아는 사람(좀비)과 같은 파티에 있던 사람은 감염된다. import java.util.Scanner; public class Main{ static int[][] party; static int[] arr; static int[] arr2; public static void check_infect(int N, int M){ //N: how many people, M: party for(int i=0; i

    1018번: 체스판 다시 칠하기 (BOJ JAVA)

    1018번: 체스판 다시 칠하기 사용 언어: JAVA 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 ..