목록Algorithm (82)
촉촉한초코칩
03-1 검색 알고리즘 검색 기법 3가지 배열 검색 선형 리스트 검색 : 무작위로 늘어놓은 데이터 모임에서 검색 수행 이진검색트리 검색 : 일정한 규칙으로 늘어놓은 데이터 모임에서 빠른 검색 수행 해시법 : 추가, 삭제가 자주 일어나는 데이터 모임에서 빠른 검색 수해 체인법 : 같은 해시값의 데이터를 선형 리스트로 연결하는 방법 오픈 주소법 : 데이터를 위한 해시값이 충돌할 때 재해시하는 방법 * 추가/삭제가 자주 일어나는 경우 비용이 많이 든다. 03-2 선형 검색 (linear search) 선형 검색 (순차 검색 sequential search) 원하는 키 값을 갖는 요소를 만날 때까지 앞에서부터 순서대로 요소를 검색하는 것 배열 검색의 종료 조건 검색할 값을 발견하지 못하고 배열 끝을 지나간 경우..
문제 과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오. 예를 들어, 다음과 같이 81개의 수가 주어지면 이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다. 입력 첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다. 출력 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다. 먼저 9x9 배열과 max, 그리고 최댓값의 위치를 저장할 변수를 선언한다. 이중for문으로 9번씩 돌려서 값을 입력받고 ..
문제 N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오. 입력 첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다. 출력 첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다. 먼저 행, 열을 입력받는다. 그리고 A와 B 배열을 선언하고 행, 열 만큼 배열 값을 입력받는다. 그리고 다시 행, 열 만큼 반복해서 같은 행/열 값을 더해주고 출력한다. #include #include int main() { int n..
문제 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다. 도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다. 공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (1 ≤ N ≤ 10..
문제 오늘은 혜아의 면접 날이다. 면접 준비를 열심히 해서 앞선 질문들을 잘 대답한 혜아는 이제 마지막으로 칠판에 직접 코딩하는 문제를 받았다. 혜아가 받은 문제는 두 수를 더하는 문제였다. C++ 책을 열심히 읽었던 혜아는 간단히 두 수를 더하는 코드를 칠판에 적었다. 코드를 본 면접관은 다음 질문을 했다. “만약, 입출력이 N바이트 크기의 정수라면 프로그램을 어떻게 구현해야 할까요?” 혜아는 책에 있는 정수 자료형과 관련된 내용을 기억해 냈다. 책에는 long int는 4바이트 정수까지 저장할 수 있는 정수 자료형이고 long long int는 8바이트 정수까지 저장할 수 있는 정수 자료형이라고 적혀 있었다. 혜아는 이런 생각이 들었다. “int 앞에 long을 하나씩 더 붙일 때마다 4바이트씩 저장..
문제 꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다! 입력 첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다. 출력 A+B+C의 값을 출력한다. 간단하게 int 형으로 선언해서 더했는데 틀렸다고 떴다. 입력 값을 보면 10의 12제곱을 한 값까지 받을 수 있다. 그러면 int형이 아니라 부호가 없는 long 형을 써야 한다. #include int main() { unsigned long a, b, c; scanf("%lu", &a); scanf("%lu", &b); scanf("%lu", &c); unsigned long sum = a+b+c; printf("%lu\n", sum); } + 그리고 출력..