본문 바로가기

BaekJoon/C++82

10026 : 적록색약 (C++) 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 오랜만에 풀어보는 그래프탐색 문제 한 개의 dfs함수를 만들어서 문제를 해결 해 보고 싶었지만 결국 두개로 나누어 만들어 문제를 해결했다. 한개로 합쳐 만들 수 있을까? #include #include #include using namespace std; char map[100][100]; bool visit[100][100]; bool visitColor[100][100]; int N; int colorWeak = 0; int normal = 0; int.. 2021. 2. 12.
18111 : 마인크래프트 (C++) 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 어려웠다... #include using namespace std; int main() { int N, M, B; cin >> N >> M >> B; int map[N * M]; int maxi = 0; int mini = 256; for(int i = 0; i > map[i]; maxi = maxi > map[i] ? maxi : map[i]; mini = mini > map[i] ? map[i] : mini; } int .. 2021. 2. 12.
1920 : 수 찾기 (C++) 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 입력이 최대 N이 10만개, M이 10만개 들어올 수 있으므로 하나하나 전부 탐색하면 100억의 연산을 수행해 2초인 시간제한을 넘어가 버린다. 그래서 이분탐색을 실행하여 계산을 해줘야하므로 이분탐색으로 문제를 해결하였다. #include #include using namespace std; int main() { int N, M; scanf("%d", &N); int arr[N]; for(int i = 0; i .. 2021. 2. 11.
2805 : 나무 자르기 (C++) 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 이분탐색... 어려워 #include using namespace std; int N, M; int main() { cin >> N >> M; int tree[N]; int maxTree = 0; for(int i = 0; i > tree[i]; maxTree = maxTree < tree[i] ? tree[i] : maxTree; } int left = 1; // 시작값 int right =.. 2021. 2. 10.
1654 : 랜선 자르기 (C++) 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 풀기싫어... #include using namespace std; int K, N; unsigned int ans; int search(unsigned int left, unsigned int right, unsigned int LAN[]) { int cnt = 0; if(left > right) { return -1; } unsigned int mid = (left + right) / 2; for(int i = 0; i < K; .. 2021. 2. 10.
1987 : 알파벳 (C++) 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 백트래킹기법을 사용하여 푼 문제이다. 백트래킹을 사용했기 때문에 visit배열을 따로 사용하지 않았다. #include #include using namespace std; int map[20][20]; bool check[26]; int R, C; int result = 0; int dx[4] = {1, -1, 0, 0}; int dy[4] = {0, 0, 1, -1}; void dfs(int x, int y, int cnt) { for(int i = .. 2021. 2. 9.
1934 : 최소공배수 (C++) 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 최소공배수는 먼저 최대공약수를 구한 후 A와 B를 곱한 값에 최대공약수로 나누어주면 최소공배수를 구할 수 있다. #include using namespace std; int gcd(int A, int B) { int temp = 0; while(B > 0) { temp = B; B = A % B; A = temp; } return A; } int lcm(int A, int B) { return (A * B) / gcd(A, B); } int .. 2021. 2. 9.
1010 : 다리 놓기 (C++) 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 > testCase; for(int i .. 2021. 2. 9.
2206 : 벽 부수고 이동하기 (C++) 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 푸는데 오랜 시간이 걸렸던 문제. 결국 남의 코드를 보고 생각하며 다시 풀었다. 너무 어려오~ 더 많이 연습하고 문제 풀어서 열심히하자 #include #include #include #include using namespace std; #define MAX 1001 int map[MAX][MAX]; int visit[MAX][MAX][2]; int dx[4] = {1, -1, 0, 0}; int dy[4] = {0, 0, 1, -1};.. 2021. 2. 9.