728x90

알고리즘 246

백준] 13752 - 히스토그램(ACM-ICPC Regionals)

시간 제한 : 2초메모리 제한 : 512MB 입력각 입력은 하나의 테스트 케이스로 구성됩니다. 프로그램이 여러 입력에서 여러 번 실행될 수 있습니다. 첫 번째 입력 줄에는 데이터 항목 수를 나타내는 정수 n (1 ≤ n ≤ 100)이 포함됩니다. 다음 n 개의 라인 각각에는 데이터인 단일 정수 k (1 ≤ k ≤ 80)가 있습니다. 출력'='문자를 사용하여 가로로 히스토그램을 인쇄하십시오. 각 데이터 항목의 막대를 데이터 항목 k와 동일한 '='숫자와 함께 주어진 순서대로 자체 행에 인쇄하십시오. '='사이에 공백을 인쇄하지 마십시오. 소스코드#include using namespace std; int main(void) { int n, arr[100]; cin >> n; for (int i = 0; i..

해시테이블(Hash Table)과 체이닝(Chaining)에 대한 간략한 정리

해싱과, 해시테이블 그리고 충돌을 처리하는 체이닝 기법에 대해서 한 번 정리해보자.이 글을 시작하기에 앞서, 스택오버플로우의 많은 자료들 그리고 위키피디아, 각종 유튜브 강의를 참고했다는 사실을 먼저 알립니다. 해시와 해시함수 해시 함수(Hash Function)는 데이터의 효율적인 관리를 위해 길이가 각기 다른 데이터를 고정 길이로 매핑하는 함수다. 이 때 매핑하는 과정을 해싱(Hashing)이라고 하며, 매핑하기 전의 데이터를 키(Key), 매핑 후의 데이터를 해시 값(Hash Value; 때로는 Value)이라 한다. 해시의 목적 해시 테이블(Hash Table)해시 테이블은 데이터의 해시 값을 테이블 내 주소로 이용해먹는 탐색 알고리즘으로, 잘 구현하면 이진 탐색보다 빠르게 처리할 수 있다. 암호..

백준] 4435- 중간계 전쟁(ACM-ICPC Regionals)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 전투의 개수 T가 주어진다. 각 전투는 두 줄로 이루어져 있다. 첫째 줄에 간달프 군대에 참여한 종족의 수가 주어진다. 이 값은 공백으로 구분되어 있으며, 호빗, 인간, 엘프, 드워프, 독수리, 마법사 순서이다. 둘째 줄에는 사우론 군대에 참여한 종족의 수가 주어진다. 이 값 역시 공백으로 구분되어 있으며, 오크, 인간, 워그, 고블린, 우럭하이, 트롤, 마법사 순서이다. 모든 값은 음이 아닌 정수이고, 각 군대의 점수의 합은 32비트 정수 제한을 넘지 않는다. 출력각 전투에 대해서, "Battle"과 전투 번호를 출력한다. 그 다음에 간달프의 군대가 이긴다면 "Good triumphs over Evil"를, 사우론의 군대가 이긴다면 "Evil ..

백준] 1652 - 누울 자리를 찾아라

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다. 출력첫째 줄에 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리의 개수를 출력한다. 소스코드#include #include #include using namespace std; int main(void) { int n, vertical = 0, horizontal = 0; cin >> n; vector room(n); for (int i = 0; i > room[i]; for (int i = 0; i < n; i++) { for (i..

백준] 2246 - 콘도 선정(ACM-ICPC Regionals)

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 콘도의 개수를 나타내는 자연수 N(1≤N≤10,000)이 주어진다. 다음 N개의 줄에는 각 콘도에 대한 정보를 나타내는 두 정수 D(1≤D≤10,000), C(1≤C≤10,000)가 주어진다. D는 그 콘도의 바닷가로부터의 거리를 나타내고, C는 그 콘도의 숙박비를 나타낸다. D와 C값이 서로 같은 콘도가 주어지지는 않는다. 출력첫째 줄에 후보가 될 수 있는 콘도의 수를 출력한다. 소스코드 #include #include using namespace std; int main(void) { int n, cnt = 0; bool check; cin >> n; vector arr(n); for (int i = 0; i > a..

백준] 2145 - 숫자 놀이(ACM-ICPC Regionals)

시간 제한 : 2초메모리 제한 : 128MB 입력각 줄에 숫자 N이 주어진다. N은 100,000보다 작은 양의 정수이다. 마지막 입력은 0이며, 0에 대한 결과는 출력하지 않는다. 출력한 줄에 하나씩 한 자릿수 결과를 출력한다. 소스코드 #include using namespace std; int main(void) { int n, tmp1, tmp2; while (1) { cin >> n; if (n == 0) break; while (n >= 10) { tmp1 = n, tmp2 = 0; while (tmp1 > 0) { tmp2 += tmp1 % 10; tmp1 /= 10; } n = tmp2; } cout

백준] 2167 - 2차원 배열의 합

시간 제한 : 2초메모리 제한 : 128MB 입력첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 합을 구할 부분의 개수 K(1 ≤ K ≤ 10,000)가 주어진다. 다음 K개의 줄에는 네 개의 정수로 i, j, x, y가 주어진다(i ≤ x, j ≤ y). 출력K개의 줄에 순서대로 배열의 합을 출력한다. 배열의 합은 32bit-int 범위를 초과하지 않는다. 소스코드 #include #include using namespace std; int main(void) { vector arr; vector dp; int n, m, t, x1, y..

백준] 1233 - 주사위(USACO 2008)

시간 제한 : 2초메모리 제한 : 128MB 입력입력 파일의 첫째 줄에 정수 S1, S2, S3가 주어진다. 출력출력 파일의 첫째 줄에 가장 높은 빈도로 나오는 세 주사위 합을 구하는 것이다. 단 답이 여러개라면 가장 합이 작은 것을 출력한다. 소스코드 #include using namespace std; int main(void) { int s1, s2, s3, arr[81] = { 0, }; cin >> s1 >> s2 >> s3; for (int i = 1; i

백준] 2484 - 주사위 네 개(한국정보올림피아드 2010;KOI 2010 지역본선)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 4개의 눈이 빈칸을 사이에 두고 각각 주어진다. 출력첫째 줄에 가장 많은 상금을 받은 사람의 상금을 출력한다. 소스코드 #include using namespace std; int main(void) { int n, arr[4], max = 0; cin >> n; while (n--) { int dice[7] = { 0, }, tmp=0; for (int i = 0; i > arr[i]; dice[arr[i]]++; } for (int i = 1; i

728x90