일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- i2c 통신
- ATMEGA128A
- verilog
- Recursion
- FND
- LED
- atmega 128a
- behavioral modeling
- pwm
- Edge Detector
- uart 통신
- DHT11
- dataflow modeling
- KEYPAD
- structural modeling
- D Flip Flop
- java
- vivado
- half adder
- Algorithm
- soc 설계
- Pspice
- ring counter
- stop watch
- Linked List
- test bench
- prescaling
- gpio
- hc-sr04
- BASYS3
- Today
- Total
목록Algorithm/알고리즘 문제 풀이 (31)
거북이처럼 천천히
1. 문제학생의 수를 입력 받은 뒤, 학생 수 만큼 국어, 영어, 수학 점수를 입력해 총점, 평균, 학점을 구하고 총점 순으로 정렬해 출력합니다. 학점은 평균이 90점이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 그 외는 F로 평가합니다. 2. 생각학생의 점수들과 총점, 평균, 학점을 저장해야 하기 때문에 구조체를 사용한다.학생의 수를 입력 받은 뒤, 이를 malloc 함수를 이용하여 학생의 수만큼 동적할당 받는다.Quick Sort 알고리즘을 통해 정렬한다.Padding byte를 고려하여 Padding byte가 최소화 되도록 구조체의 맴버들의 위치를 설정한다. 3. 풀이 및 코드 분석#include #include // Structure typedef struct { unsigne..
1. 문제문제 제목 : 동적 할당을 통해 문자열을 저장 및 출력 2. 생각2.1) 정적 메모리 할당의 한계 및 문제위 예시를 통해 알 수 있듯이 Compile 시점에서 얼마만큼의 문자열과 어느 정도의 길이를 갖는 문자열이 들어올지 모르기 때문에 정적인 메모리 할당을 통해 미리 메모리 공간을 확보하기 힘들다.또한 여유있게 정적 메모리 공간 할당을 받으면 실제로 사용하지 않는 메모리 공간이 발생하여 메모리 자원 낭비가 발생한다. 2.2) 동적 메모리 할당시 주의점동적 메모리 할당을 받으면 2차원 형태로 받아야 할 것이기 때문에 동적 메모리 할당은 포인터 배열 형태를 갖는다.포인터 배열은 각 원소가 포인터이기 때문에 각각의 원소들에 대해서도 동적할당을 받을 필요가 있다. 3. 풀이 및 코드 분석#..
1. 문제문제 제목 : 가로 세로의 합 구하기 2. 생각목표) 문제의 범용성을 높이기 위해 5행 6열 뿐만 아니라 행과 열 값을 받아서 2차원 배열을 생성한 뒤, 그에 대한 각 열과 행의 합을 구하여 2차원 배열의 끝에 저장하자. 가변 길이를 갖는 2차원 배열을 생성하기 위해 malloc 함수 사용중요) 각 열에 대한 1차원 가변 길이를 갖는 배열을 생성하기 위해 추가적으로 malloc 함수 사용(0, 0) 부터 시작해서 값을 대입하는 과정인 초기화 작업 수행각 행과 열의 합을 구해 대입 3. 풀이 및 코드 분석#include #include // Function prototype.void get_size_of_board(unsigned short* max_row, unsigned short* max_..
1. 문제 https://www.acmicpc.net/problem/2775 2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다 www.acmicpc.net 입력 : 첫 번째 줄에 Test case의 수 T가 주어지며, 그다음부터 층수 k, 호수 n이 주어진다 출력 : 각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라. 2. 생각 본 문제는 크게 Recursion과 규칙성, 두 가지 경우로 풀 수 있다. 하지만, Recursion인 경우 모든 경우에 대해서 접근해야 하기 때문에 규칙성을 이용한 풀이보다 시간 면에서 상대적으로 떨어진다. 예를 들어 8층 11호(k=8..
1. 문제 https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 입력 : 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. 출력 : 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력 2. 생각 본 문제는 계차 수열을 이용하여 풀었다. 계차 수열 알고리즘을 이용한 이유는 다음과 같다. ex) N = 2 일 때는 2 개의 방을 이동해야 하며, ex) N = 8 일 때는 3 개의 방을 이동해야 한다. 위 몇 가지..
1. 문제 집합을 입력받아서 그 집합의 멱집합을 구하라. 멱집합(Powerset)이란? ▶ 주어진 집합의 모든 부분 집합들로 구성된 집합 2. 생각(Recursion Thinking) 고등학교때 배운 내용을 떠올리며, set A = {a, b, c, d, e, f}가 존재한다고 가정한다. Q) 집합 A의 부분 집합의 갯수는 몇 개인가? 집합의 원소들은 "부분 집합내에 존재하는가?"에 따라서 두 가지 경우의 수를 갖는다. 이를 바탕으로 모든 원소가 존재하지는 공집합 부터 모든 원소가 존재하는 경우까지 경우의 수를 생각하면 집합 A의 부분 집합의 갯수는 2^6 = 32개이다. 2.1. Powerset를 구현하는 알고리즘 아이디어 부분 집합의 갯수를 세는 것처럼 "특정 원소가 부분 집합에 존재하는가?"를 이용..
1. 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 생각 본 문제는 길이가 M인 수열을 구해야 하기 때문에 state-space tree를 이용하여 해가 될 수 있는 모든 노드에 직접 방문하여 찾아야 하기 때문에 1) Depth-first search, 2) Back..
1. 문제 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 문제 출처) https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 2. 생각 본 문제를 푸는 알고리즘은 다양하지만, Recursion의 연습을 위해 Recursion으로 풀도록 하겠다. 2.1. Recursion Thinking Recursion을 이용한 알고리즘은 다음과 같다. 합계(value) 값을 0으로 초기화한 뒤, 1부터 3까지 각각 더한다. if) 합계(value) 값이 입력 받은 값(num)보다 크면 "해당 구성 요소들의..