본문 바로가기

2578)빙고 https://www.acmicpc.net/problem/2578 빙고 게임을 하는 방법은 누구나 잘 알고 있다. 어떻게 빙고 게임을 하는지 생각해보면 쉽게 문제를 풀 수 있다. 1.우선 자신의 보드를 만들기 위해 5x5만큼의 수들을 입력 받는다. 2.사회자가 부른 수 하나를 입력 받고 내 빙고판에 해당 수가 있는 지 검사한다. 2-1.내 빙고판에 해당하는 수가 있다면 그 위치에 CHECK를 저장한다. 3.자신의 보드가 빙고인지 검사한다. 빙고인지 검사하기 위해 일렬로 CHECK가 나열되어 있는지 검사한다. CHECK는 0에 이름을 붙인 것인데, 보드의 어떤 수를 합하더라도 0보다 크다. 그래서 한 줄에 CHECK로 나열되어 있다면 그 라인의 합은 0이다. 라인 검사를 통해 라인 합이 0이 되는 경우를 ..
2607)비슷한 단어 https://www.acmicpc.net/problem/2607 같은 구성을 지닌 단어란 알파벳의 종류가 같고, 각 알파벳 별로 갯수가 같은 두 단어를 말한다. 예를들어 기준이 되는 단어 ABC, 다른 단어 CAB는 서로 같은 구성을 가진다. 또 기준이 되는 단어에 알파벳을 하나 넣거나, 빼거나, 바꿀 때 두 단어가 같은 구성이 되면 비슷한 단어가 된다. 예를들어 기준 단어 ABC와 ABCD는 비슷한 단어다. ABC에 D를 넣으면 ABCD와 같은 구성이 되기 때문이다. ABC와 AB도 비슷한 단어다. ABC에서 C를 빼면 같은 구성이기 때문이다. ABC와 ABD는 어떨까. C를 D로 바꿔 주면 같은 구성이기 때문에 두 단어는 비슷한 단어다. 위 예를 가지고서 각 알파벳의 갯수를 배열로 표현해보자. 1...
2606)바이러스 https://www.acmicpc.net/problem/2606 주어진 예제를 그래프로 표현하면 아래 그림과 같다.1번 컴퓨터에 어떻게든 연결된 컴퓨터는 감염된다. 우선 네트워크를 표현하기 위해 이차원 배열을 할당하고 두 노드 사이에 간선이 있으면 TRUE를 저장한다. 1번 노드에서 1~n번 노드 중 간선이 있는 경우 그 노드를 방문한다. 방문한 노드가 i번 노드일 때 해당 노드에 감염 여부를 TRUE로 바꿔준다. i번 노드에서 1~n번 노드 중 간선이 있을 때 그 노드를 방문한다. 이미 감염된 경우 빠져나온다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include#define TRUE..
2605)줄 세우기 https://www.acmicpc.net/problem/2605 줄 세우는 방법이 특이하지만 어려운 문제는 아니다. 줄을 서는 사람은 숫자를 받게 되는데 그 수만큼 앞으로 가면 된다. 삽입 정렬을 약간 응용했다. 수를 입력받았을 때 입력받을 위치에서 그 수만큼 앞쪽에서 입력받아야 한다. 예를들어 순서대로 0 1 1 3 2를 받았다고 치자. 4번째 학생이 받은 번호는 3이기 때문에 4가 저장될 위치는 t에서 3칸 앞에 있다.. 삽입 위치부터 한 칸씩 밀어내면 된다. 12345678910111213141516171819202122232425262728293031#include int main() { int n; int *arr; int input; int j,t = 0; scanf("%d",&n); arr..
2309)일곱난쟁이 https://www.acmicpc.net/problem/2309 9명의 난쟁이 중 7명이 진짜이고 진짜 난쟁이의 키 합이 100이다. 일단 싹 다 더하고 임의로 난쟁이 2명의 키를 빼줘서 100이 되는 경우를 찾으면 된다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#includetypedef enum _BOOL { FALSE = 0, TRUE =1} BOOL; void swap(int *A, int *B) { int temp; temp = *A; *A = *B; *B = temp;} int partition(int *A..
2217)로프 https://www.acmicpc.net/problem/2217 각 로프마다 견딜 수 있는 최대 무게가 다르다. n 개의 로프가 무게가 w인 물체를 견딜 때, 각 로프에는 w/n만큼의 무게가 가해진다. 이때 로프들이 견딜 수 있는 최대 무게는 얼마일까? 모든 로프들을 사용한다면, 견딜 수 있는 무게가 가장 적은 로프에 맞춰져야 한다. 예를들어 각 로프들이 견딜 수 있는 무게가 A:10, B:15, C:20, D:30, E:40 이라고 하자. 모든 로프를 사용한다면 w/5를 가장 작은 무게를 견디는 A가 견뎌낼 수 있어야 한다. 만약 w가 60이라면 A에 12만큼의 무게가 가해져 이를 견딜 수 없다. 즉 w의 최대값은 A가 견딜 수 있는 무게인 10에서 5를 곱한 값이다. 여기서 Wmin= Wmax / ..
2290)LCD Test https://www.acmicpc.net/problem/2290 주어진 수를 전광판처럼 출력해야 한다. 전광판에 나타나는 숫자는 그림처럼 몇 개의 막대로 표현된다. 각 막대는 가로 방향 막대와 세로 방향 막대로 나눠볼 수 있다. 또 각각의 막대는 출력되는 위치가 있다. 세로 방향 막대는 왼쪽 그림에서 0,1,2,3의 위치를 가지며 가로 방향 막대는 오른쪽 그림에서 0,1,2의 위치를 갖는다. 자 숫자 7을 출력한다고 하자. 어떤 막대를 사용해야 할까?0번 가로 막대와 0,3번 세로 막대를 사용하면 되겠다. 위와 같은 방식으로 각 숫자를 표현할 때 위치 별로 가로 막대 함수, 세로 막대 함수로 배열을 채우면 된다. 배열에 막대를 저장할 때 시작 위치를 결정하는 방법에 대해 생각해보자. 예를들어 "00"에..
9324)진짜 메세지 https://www.acmicpc.net/problem/9324 어떤 문자열이 진짜 전달하고자 하는 문자열 이라면 같은 문자가 3번 등장할 때 3번째 등장한 문자의 다음 문자는 반드시 같은 문자여야 한다. 예를들어 "AACAD"가 진짜 메세지일까 가짜 메세지일까. 마지막 'A'를 카운팅할 때 'A'를 3번 카운팅했는데 뒤의 문자가 'A'가 등장하지 않고 'D'가 등장했다. 따라서 위 문자열은 가짜 메세지이다. 이처럼 어떤 문자가 3번 등장했을 때 바로 다음 문자가 같은 문자인지만 검사하면 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include typedef enum _BOOL { FALSE ..