컴퓨터기본 141

[백준] 7569번: 토마토

https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 문제이해 https://chagaun-omija.tistory.com/74 [백준] 7576번: 토마토 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다... chagau..

[백준] 2933번: 미네랄

https://www.acmicpc.net/problem/2933 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄 www.acmicpc.net 나머지 예제 생략 문제에 예외 상황이 없어서 예제는 다 맞히고 자꾸 틀려서 스트레스 받는 문제다 ㅎㅎ 일단 기본 원리들을 정리해보면, 1. 막대를 던지기 (Throw_Stick()) 그냥 왼쪽에서부터/오른쪽에서부터 탐색하다가 미네랄이면 부시면 됨 void Throw_Stick(int n) { if (n % 2 == 0) { // 왼쪽에서 오른쪽으로 던짐 for (int i = 0; i < C; i++) { if..

[백준] 1260번: DFS와 BFS

https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 그냥 아주 간단하게 BFS 한 번, DFS 한 번 돌려주면 된다. BFS를 돌릴 때 항상 visited 배열을 초기화하는 거랑 queue 초기화를 잊지 말자! #include int N, M, V; // 노드, 간선, 시작 노드 int map[1000+5][1000+5]; int visited[1000 + 10]; void Get_Input(void) { in..

[백준] 13458번: 시험 감독

아주 간단한 문제인데, 문제에 말이 조금 헷갈리고, 타입이 주요했던 문제이다. '오직 1명만' 이라는 말은 1명이 반드시 있고, 2명 이상은 안된다는 뜻인가보다. (1명이 반드시 있어야 하는 지가 아리까리 했음) 그리고, 총 1000000칸인데, 모든 칸이 1000000명이고, 감독관 1인이 감시할 수 있는 학생 수가 1명이라면, 최종 답이 1000000 * 1000000 이 될 수 있기 때문에, int안에 안들어온다! (정답률이 낮은 건 이거 때문인듯) #include #define MAXN 1000000 int N; int map[MAXN + 10]; int B, C; // 총감독관, 부감독관 int main(void) { //freopen("in.txt", "r", stdin); scanf("%d"..

[SWEA] 2382. 미생물 격리

문제 이해 시뮬레이션 문제이다. 시간의 흐름에 따라 어떻게 움직이는지, 예외 상황 파악 등이 중요한 문제였다. 일단 군집 배열을 둔다. (군집의 위치, 미생물 수, 방향 등을 저장하는 배열이다.) 군집은 최대 1000개이고, 시간은 최대 1000이니까, 각 시간 별로 군집에 대한 처리를 하면 1000*1000 이라 시간 내에 들어온다. 그래서 그냥 루프를 돌리면 되겠다고 생각했다. 루프를 돌면서 할 것은, 1. 위치를 옮겨준다. 2. 만약 약품이 있는 위치이면 미생물 수를 반으로 감소시키고, 방향을 바꿔준다. 3. 만약에 해당 위치에 여러 군집이 모이면, 그 중 가장 큰 군집으로 모아버리고 나머지 군집은 소멸되었다 생각한다. Trouble shooting: 처음에는 군집마다 저 세 단계를 처리하는 식으로..

[SWEA] 5644. 무선 충전

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 이해 0초부터 M초까지 이동하면서 해당 위치에서 두 사람이 충전할 수 있는 최댓값을 구해서 더해주면 된다. 문제 이해는 어렵지 않지만, 가능한 최대 충전값을 찾는 게 좀 까다롭다. 나는 decide라는 함수를 만들어서 특정 시간에서 A와 B가 충전할 수 있는 최댓값을 반환하도록 했다. 우선 각 충전소를 보면서 A, B와의 거리가 그 충전소의 충전범위 내인지를 확인하여, acan, bcan이라..

[SWEA] 4014. 활주로 건설

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeW7FakkUDFAVH SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 이해 배열을 얼마나 자유자재로 다루는지를 보는 문제인 것 같다. 그리고 문제에 나와있지 않은 예외 사항을 잘 캐치하는지를 보는 것 같다. 사실 아이디어는 단순하다. 배열을 가로/세로로 한 줄 탐색하면서 만약에 높이가 달라지면 낮은 쪽에 연속으로 경사로 길이 X 만큼의 공간이 있는지를 확인하면 된다. 나는 check()라는 함수를 만들어서 위의 조건을 확인했다. 그러기 위해서 세로와 가로 줄을 ..

[SWEA] 4013. 특이한 자석

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 이해 거의 그냥 시뮬레이션 문제인데, 내가 문제를 또 잘못봐서 한참을 헤맸다. 최종 점수를 판단하는 건 모든 cmd를 수행하고 난 후이다! 난 cmd를 한 번 실행할 때마다 점수가 나는 건줄 알았다... cmd를 하나씩 수행할 때, - 좌우에 다른 극인 자석이 있으면 걔네를 돌린다. - visited 배열을 하나 두어서 이미 한번 돌렸던 애가 다시 돌아가지 않게 한다. 예를 들어 2번 자석이 ..

[정올] 2893 : 제리의 치즈먹기 (Cheese)

http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2156&sca=9030 JUNGOL www.jungol.co.kr 문제 이해 제리의 체력이 치즈를 먹을 때마다 1씩 증가하고, 치즈는 1에서 N까지 하나씩만 있으므로, 1에서 N까지의 치즈를 순서대로 하나하나씩 찾아가는 경로를 찾으면 된다. 최단 시간(경로) 를 찾으라고 했으니 BFS를 사용하는 문제일 것이다. 좀 더 자세히 보자면 시작위치에서 1까지 가는 최단 경로를 BFS를 이용해서 찾고, 2에서 3까지의 최단 경로를 BFS를 이용해서 찾고 이런 식이다. 각 BFS를 호출할 때마다 큐와 visited 배열을 초기화 하는 것을 잊지 말자!! 추가적으로 주의해야할 점은, map을 문자열로 받기 때문에 정수..

[SWEA] 2383. 점심 식사시간

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5-BEE6AK0DFAVl SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 이해 사람은 최대 10명이므로, 사람을 기준으로 DFS를 구현해도 충분히 할 수 있다. 문은 2개뿐이므로 사람 별로 문을 선택하면 2^10의 경우가 나온다. 모든 경우를 살펴봐도 시간 limit안에 들어올 수 있다. 그러므로 사람을 기준으로 DFS를 하면 된다. 모든 사람이 둘 중 하나의 문을 선택한 후에, 그 정보를 기반으로 시간이 얼마나 걸렸는지를 계산한다. 그리고 각 시간마다 최대값과 비..