일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |
- Algorithm
- java
- Edge Detector
- pwm
- KEYPAD
- BASYS3
- stop watch
- ATMEGA128A
- dataflow modeling
- vivado
- atmega 128a
- FND
- i2c 통신
- prescaling
- hc-sr04
- gpio
- DHT11
- test bench
- uart 통신
- Linked List
- ring counter
- verilog
- D Flip Flop
- structural modeling
- half adder
- LED
- Pspice
- Recursion
- soc 설계
- behavioral modeling
- Today
- Total
목록Algorithm (38)
거북이처럼 천천히

1. 문제 (다항식 계산) 2. 생각 "MySingleLinkedList" 클래스는 해더 노드와 연결 리스트의 사이즈 정보를 담고 있으며, 연결 리스트에 노드 추가 및 삭제 등을 다루는 메서드를 갖고 있다. "Node" 클래스는 연결리스트의 노드로서 데이터와 다음 노드의 참조를 갖고 있다. add 명령어를 수행하기 위해서 다음과 같은 과정 수행 ▶ 입력 받은 항의 지수와 traverse를 이용하여 입력 받은 항보다 지수가 작거나 같은 위치를 찾는다. ▶ 만약 현재 노드가 null이 아닌 동시에 입력받은 지수와 동일하다면 추가하려는 항과 동일한 항이 이미 존재하기 때문에 단순히 계수만 수정 ▶ 만약 현재 노드가 null이라면 동일한 항은 존재하지 않고, 추가하려는 항의 지수는 다항식내에서 가장 작다는 것을..

1. 문제 (겹치는 최대 면적 구하기) 2. 생각 두 개의 사각형을 선택하여 겹치는지 확인 겹치면 겹치는 면적을 계산한다. 문제) 어떻게 겹치는 면적을 계산할 것인가? ▶ 아래와 같이 충분한 사이즈의 배열을 생성한 뒤, 0으로 채운다. ▶ 각각의 사각형의 위치와 사이즈 만큼 1씩 증가 시킨다. ▶ 겹치는 부분은 1씩 2번 증가하여 해당 원소들은 원소 값이 2가 된다. ▶ 원소 값이 2인 부분이 겹치는 부분이기 때문에 해당 면적을 구한다. 구한 면적이 최대 면적인지를 판단 최종적으로 최대 면적과 그 쌍을 출력 3. 풀이 및 코드 분석 package SolveProblem.Chapter2.Problem2; import java.util.Scanner; import java.io.File; import jav..

1. 문제 (다항식 계산) 2. 생각 변수 타입(다항식)에 대해서 먼저 생각해볼 필요가 있다. ▶ 다항식은 여러 개의 항들이 모여서 만든 식이라는 점을 생각 ▶ 각 항들은 계수와 차수 값을 저장할 수 있는 인스턴스 변수들이 존재하는 Term 클래스 정의▶ 다항식은 여러 개의 항들을 배열 형태로 저장하고, 실제 항들의 갯수와 다항식의 이름을 저장할 수 있는 Polynomial 클래스 정의 add 명령어를 통해 새로운 항이 들어오면 어떻게 저장할 것인가? ▶ 미리 차수를 기준으로 내림차순 저장하는 것이 나중에 출력할 때, 편리할 거 같다. ▶ 새로운 항의 차수를 통해 위치를 찾는다. ▶ for문을 이용하여 차수가 낮은 항들을 한 칸씩 뒤로 옮긴다. 하지만, add 했는데, 이전 계수와 더해져서 계수가 0이 ..

1. 문제 (배열내에서 소수 찾기) 2. 생각 배열내에서 시작점과 방향, 길이를 정의하고, for문을 이용하여 모든 경우에 대해서 생각한다. getDigit 메소드에 시작점(x, y)와 방향(dir), 길이(length)를 actual parameter로 전달하면 switch-case 문을 이용하여 방향(dir)의 값에 따른 다음 원소의 위치값(newX, newY)를 얻는다. 만약 다음 원소가 배열 밖을 벗어나면 -1을 return하여 다음 경우에 대해서 생각한다. 배열내에 존재한다면 해당 위치의 원소값을 반환한다. computeValue 메소드내에서 getDigit 메소드를 통해 얻은 다음 원소들을 하나의 숫자로 합치는 과정을 수행한다. 연속된 원소들로 이루어진 숫자를 main에 반환한다. isPrim..

버블정렬(Bubble sort) 인접한 두 개의 원소를 검사하여 정렬하는 알고리즘 버블정렬(Bubble sort) 알고리즘의 구체적인 개념 ▶ 첫 번째 원소(8)과 두 번째 원소(4)를 비교하여 둘 중 큰 값이 오른쪽으로 올 수 있도록 자리 교환을 한다. 예시인 경우 8이 4보다 크기 때문에 8과 4의 자리를 바꾼다. ▶이번에는 두 번째 원소(8)과 세 번째 원소(1)을 비교한다. 이번에도 8이 1보다 크기 때문에 8과 1의 자리를 서로 바꾼다. ▶ 이와 같은 과정을 배열의 마지막까지 진행하고나면 배열의 마지막 원소에는 배열 내에서의 최대값이 위치하게 된다. 예시에서 볼 수 있듯이 최대 값은 13이 나왔다. ▶ 이번에는 배열의 가장 오른쪽을 제외하고, 위 과정을 다시 실행한다. 이번에는 최대값은 11이 ..

1. 문제 (최대 소수값을 찾기) 2. 생각 배열의 사이즈를 입력과 배열의 원소들을 입력받아 변수와 배열에 각각 저장한다. for문을 이용하여 시작점(i)을 정의하고, 끝점(j)을 정의한다. 이전까지의 값에 10을 곱한 뒤, 새로운 원소를 더해가며 원소들을 합한다. (▶ sum = sum*10 + storage[j] ) 2부터 sum까지 for문과 나머지연산자를 이용하여 해당 숫자(sum)이 소수인지 판단 ( 소수가 아니면 isPrim = true, 소수이면 isPrim = false ) 만약, 해당 숫자(sum)이 소수인 동시에 max보다 크면 max값을 해당숫자로 대체한다. 결과 출력 3. 풀이 및 코드 분석 import java.util.Scanner; public class programming ..
이미 알고 있는 소수 판별법 이미 알고 있는 소수 판별법은 다음 두 가지 방법이었다. 문제 : 자연수 X이 소수인가? 반복문을 이용하여 자연수 X을 2 ~ X-1까지 나눠봐서 한 번이라도 나머지가 0인 경우가 나오면 자연수 X은 소수가 아니다. 약수는 쌍을 이룬다는 점을 이용하여 2 ~ X-1까지가 아닌 2 ~ X/2까지 나눠봐서 자연수 X이 소수인지 판별할 수 있다. 하지만, 2 ~ root(X)이하까지만 나눠봐도 해당 숫자가 소수인지를 효율적으로 판별할 수 있다고 한다. 직감적으로 "왜 root(X) 이하까지만 나눠도 되는가?"를 이해할 수 없어 수식적으로 증명해 보자 한다. 왜 root(X) 이하까지만 나눠도 되는가? 가정 : 자연수 X은 소수가 아닌 합성수이며, 자연수 X은 M * N으로 표현할 ..
1. 문제 (코딩도장, 이상한 계산기) https://codingdojang.com/scode/590?langby=java#answer-filter-area 코딩도장 프로그래밍 문제풀이를 통해서 코딩 실력을 수련 codingdojang.com 2. 생각 괄호가 없는 사칙연산 식을 입력받았을 때 오른쪽에서부터, 더하기나 빼기를 곱하기나 나누기보다 먼저 계산한 결과를 리턴하는 코드를 작성하라. (단, 사칙연산 식은 문자열의 형식으로 입력받는다) 문자열 형식으로 괄호가 없는 사칙연산 식을 입력받는다. 입력받은 식내에 공백(space)을 제거한다. while문과 for문을 이용하여 앞에서부터 문자열을 하나씩 쪼개서 해당 부분이 연산기호(+, -, /, *)인지 여부 확인 → 만약 해당 부분이 연산기호라면, 이전..