본문 바로가기

백준15

2606 : 바이러스 (C++) 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 먼저 DFS로 푼 방식이며 인접리스트를 활용하였다. 1번 컴퓨터를 통해 감염되는 컴퓨터의 수를 출력하므로 마지막에 센 숫자에서 1을 빼준다. #include #include #include using namespace std; int cnt = 0; void dfs(int start, vector graph[], bool check[]) { check[start] = true; cnt++; for(int i = 0; i < graph[start].size(); i++.. 2021. 2. 3.
1260 : DFS와 BFS (C++) 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net #include #include #include #include using namespace std; void dfs(int start, vector graph[], bool check[]) { check[start] = true; printf("%d ", start); for(int i = 0; i < graph[start].size(); i++) { int next = graph[start][i]; if(check[nex.. 2021. 2. 3.
2167 : 2차원 배열의 합 (C++) 2167번: 2차원 배열의 합 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 www.acmicpc.net 그냥 2차원 배열 만들어서 어디부터 어디까지 구하라는 입력값 넣으면 됨... #include using namespace std; int main() { int N, M; cin >> N >> M; int arr[N+1][M+1]; for(int i = 1; i arr[i][j]; } } int cnt; cin >> cnt; for(int k = 0; k .. 2021. 2. 3.
1100 : 하얀 칸 (C++) 1100번: 하얀 칸 체스판은 8*8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램 www.acmicpc.net 한 줄씩 바로바로 받자마자 탐색을 실행하여 흰색칸에 말이 있을 경우 count변수를 1씩 증가시킨다. 체스판은 줄마다 색깔의 칸이 다르므로 조건문 j변수에 i%2를 하여 흰색칸의 변화를 주었다. #include #include using namespace std; int main() { int count = 0; for(int i = 0; i > C; for(int j = i%2; j < 8; j+=2) { if.. 2021. 2. 3.
1475 : 방 번호 (C++) 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. www.acmicpc.net 처음에 방 번호를 문자열로 받아 처리하려고 하였으나 int형 정수로 받아 처리를 하였다. #include #include using namespace std; int main() { int roomNumber; cin >> roomNumber; int check[10] = { 0 }; int maxSize = 0; if(roomNumber == 0) { maxSize = 1; } while(roomNumber > 0) { check[roomNumber % 10]++; roomNumber /= 10; } check[6] += check[9]; if((c.. 2021. 1. 20.
1259 : 팰린드롬수 (C++) 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net 숫자 문자열이 들어오면 문자열의 갯수 / 2한 만큼 수행하며 맨앞과 뒤를 순서대로 비교하며 팰린드롬수가 맞으면 yes를 출력하고 중간에 맞지 않는 수가 하나라도 발생한다면 no를 출력한다. #include #include using namespace std; int main() { while(true) { string input; cin >> input; if(input[0] == '0') { break; } int result = 0; for(int i = 0; i < inp.. 2021. 1. 20.
2810 : 컵홀더 (C++) 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net 그리디 알고리즘을 사용하여 푸는 문제 주의할 점은 컵 홀더를 세는 것이 아닌 사람을 세야하는 문제. 좌석이 S만 나올 때는 자신의 왼쪽에 있는 컵홀더만 사용하다가 LL좌석이 나온 후 부터는 자신의 오른쪽에 있는 컵홀더만 사용할 수 있음과 동시에 이후 LL좌석이 나오는 때는 한 사람은 컵홀더를 사용할 수 없게 된다. 이에 맞춰 코딩을 하였다. #include #include using namespace std; int main() { int N; cin >> N; string seat; cin >> seat; int count = 0; int check = 0;.. 2021. 1. 19.
4796 : 캠핑 (C++) 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 그리디 알고리즘을 이용하여 푸는 문제로 총 휴가일 수에서 캠핑장을 이용하는 일수와 연속해서 이용하지 못하는 일의 수를 빼면서 계산하면 된다. 총 휴가일 수에서 캠핑장을 연속으로 이용하는 날의 수를 빼고 그 다음 이용하지 못하는 날을 뺀다. 그 다음 결과값에 캠핑장을 이용한 날을 더하고 총 휴가일의 수가 캠핑장을 이용할 수 있는 일자 보다 작아지면 while문을 나와 총 휴가일의 수가 음수면 더하지 않고 음수가 아니면 결과값에 남은 일의 수를 더한다. #in.. 2021. 1. 19.
10799 : 쇠막대기 (C++) 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net - 스택을 이용하여 푸는 문제이며 '()'가 들어오면 안에 스택안에 있던 사이즈를 측정하여 결과 값에 더하고 ')'가 입력되면 스택에서 pop을 하고 결과값에 1을 더한다. #include #include #include using namespace std; int main() { string stick; stack t; int result = 0; cin >> stick; for(int i = 0; i < stick.size(); i++) { if(stick[i] == '.. 2021. 1. 18.