728x90
반응형

알고리즘 107

[백준/BFS/C++] 2606번 바이러스

https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net #include using namespace std; int n, m; vector v[101]; bool isVisited[101]; int result = 0; void findVirus(){ queue q; q.push(1); isVisited[1] = true; while(!q.empty()){ int front = q.front(); q.pop(); result++; for(int i=0; i..

[백준/구현/C++] 14499번 주사위 굴리기 (삼성 SW 역량 테스트 기출)

https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 문제 해결 방법 주사위가 굴려질 때 마다 윗면을 어떻게 체크할까 하다가 위, 앞, 오른쪽을 표시하는 포인터를 구현하기로 했다. 그러면 주사위가 굴려질 때 마다 인덱스가 오른쪽처럼 변하게 된다 전체 코드 #include using namespace std; int n, m, x, y, k; int mapp[21][21]; int pl..

[백준/구현/C++] 21610번 마법사 상어와 비바라기 (삼성 SW 역량 테스트 기출)

https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 문제 해결 방법 먼저 구조체 두개를 선언한다 MOVEINFO 는 구름 이동방향과 거리를 담고 POSITION에는 각 위치마다 현재 구름이 있는지 여부, 사라졌는지 여부, 물의양을 담는다 struct MOVEINFO{ int dir; // 방향 int sp; // 거리 }; struct POSITION{ bool hasCloud = false; // 현재 구름 있는 경우 bool disClo..

[백준/구현/C++] 21608번 상어 초등학교 (삼성 SW 역량 테스트 기출) *

https://www.acmicpc.net/problem/21608 21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 일단 머리로 시뮬레이션을 돌려봤는데 내가 생각한 방법으로는 무조건 시간초과가 나올 것 같아서 블로그를 참조했다. https://yabmoons.tistory.com/656 이 블로그를 봤는데 생각도 못한 구조체랑 필요에 맞게 조건을 만들어서 정렬하는 등 배울게 많았다. 다시 풀어보면서 공부해야겠다. 문제 해결 방법 먼저 구조체 두개를 선언한다 학생정보(STUDENT), 자리 배치를 위해..

[백준/구현/백트래킹/C++] 15686번 치킨배달 (삼성 SW 역량 테스트 기출)

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 문제 해결 방법 처음에 도시의 정보를 입력받을 때 1일때는 vector h에, 2일때는 vector ch에 좌표를 넣어준다 if(x==1) h.push_back({i,j}); // 집인 경우 else if(x==2) ch.push_back({i,j}); // 치킨집인 경우 그리고 전체 치킨집의 수와 m을 비교하여 조건을 나눠서 구현했다 1. 치킨집의 수가 m보다 클때 ( 전체..

[백준/구현/C++] 13458번 시험 감독 (삼성 SW 역량 테스트 기출)

https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net #include using namespace std; int n, b, c; int a[1000001]; long long int result; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for(int i=0; i> a[i]; } cin >> b >> c; result ..

[백준/구현/백트래킹/C++] 1759번 암호 만들기

https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 문제 해결 방법 1. 입력받은 문자들을 정렬한다 2. 이전 인덱스를 저장해서 다음 인덱스를 고를수 있게한다 3. 자음의 수와 모음의 수 저장한다 자음과 모음의 구별은 위 사진처럼 생각해서 아래 코드처럼 구현했다. 모음인 경우 m+1, 자음인 경우 j+1 int diff = alpha[i]-'a'; if(diff==0 || diff==4 || diff==8 || diff==14 || diff==20) /..

[백준/구현/C++] 14500번 테트로미노

https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 문제 해결 방법 이 문제는 T모양과 나머지 모양을 따로 구현했다. 각 모양마다 구한 코드도 있었는데 나는 두가지 방법으로만 구현했다. 1. T제외 4가지 모양 구하기 (make() 함수) 이건 백트래킹을 사용해서 구현했다. 상하좌우를 탐색하며 범위가 넘어갔을때는 제외하고 4칸째일때 4수의 합과 최대값을 비교한다 // x좌표, y좌표, 칸들의 합, 몇번째 방문한 칸인지 void make(int x,..

[백준/백트래킹/C++] 15661번 링크와 스타트 *

https://www.acmicpc.net/problem/15661 15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 계속 시간초과가 떠서 찾아봤는데 팀을 구성할 때 스타트팀 : 1,2 링크팀 : 3,4 일때와 스타트팀 : 3,4 링크팀 : 1,2 일때 두번 구해져서 그런 것이었다 void makeTeam(int tot){ if(tot == n){ compare(); return; } isStartTeam[tot] = true; // tot번의 선수가 start팀에 있..

[백준/수학/C++] 17425번 약수의 합

https://www.acmicpc.net/problem/17425 17425번: 약수의 합 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net #include using namespace std; long long int f[1000001] = {0,}; long long int g[1000001] = {0,}; int main(void) { ios::sync_with_stdio(0); cin.tie(0); int n=1000000; int j = 1; for (int i = 1; i

728x90
반응형