Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- behavioral modeling
- Edge Detector
- vivado
- LED
- atmega 128a
- java
- dataflow modeling
- FND
- gpio
- test bench
- verilog
- ATMEGA128A
- KEYPAD
- half adder
- soc 설계
- pwm
- ring counter
- Algorithm
- BASYS3
- prescaling
- D Flip Flop
- uart 통신
- hc-sr04
- i2c 통신
- DHT11
- stop watch
- Recursion
- Pspice
- structural modeling
- Linked List
Archives
- Today
- Total
거북이처럼 천천히
알고리즘 (6월 10일) 본문
1. 문제 (코딩도장, 최빈값 구하기)
https://codingdojang.com/scode/612
2. 생각
리스트에 있는 숫자들의 최빈값을 구하는 프로그램을 만들어라.
[12, 17, 19, 17, 23] = 17
[26, 37, 26, 37, 91] = 26, 37
[28, 30, 32, 34, 144] = 없다
▶ 최빈값 : 자료의 값 중에서 가장 많이 나타난 값
▶ 자료의 값이 모두 같거나 모두 다르면 최빈값은 없다.
- 임의의 숫자들을 입력받는다.
- 내림차순으로 정리한다.
(내림차순 정렬하면 같은 숫자들끼리 그룹별로 뭉쳐있기 때문에 같은 숫자의 빈도 수를 계산하기 편리할 것으로
예상되어 내림차순으로 정리한다. 오름차순으로 정리해도 괜찮다.) - for문을 이용해서 이전 값과 현재의 값을 비교한다. 같으면 count 에 1을 더하고, 다르면 최대 빈도수(maxCount)와
비교한다. 이때, 최대 빈도수와 직전까지의 count가 같으면 빈도수가 같은 것으로 생각하여 result 리스트에 따로
저장한다. - 최대 빈도수가 1이면 모든 숫자가 다른 것으로 생각하여 최빈값없다고 출력
- 최대 빈도수가 1보다 크면 최빈값이 존재하며, 최빈값들은 result 리스트에 저장되어 있어 리스트를 출력
3. 풀이 및 코드 분석
import java.util.Scanner;
import java.util.ArrayList;
public class test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArrayList<Integer> numbers = new ArrayList<>();
// 입력 받기
while(true) {
System.out.print("숫자를 입력하시오: (그만 입력하고 싶으면 !을 입력하시오.)");
String inputData = scan.next();
if(inputData.equals("!")) {
break;
}else {
numbers.add(Integer.parseInt(inputData));
}
}
// 내림차순 정리
int max, maxidx;
for(int i=0; i<numbers.size(); i++) {
max = numbers.get(i);
maxidx=i;
for(int j=i+1; j<numbers.size(); j++) {
if(numbers.get(j)>max) {
maxidx=j;
max=numbers.get(j);
}
}
numbers.set(maxidx, numbers.get(i));
numbers.set(i, max);
}
// 최빈값 구하기
ArrayList<Integer> result = new ArrayList<>();
result.add(numbers.get(0));
int count=1, maxCount=1;
for(int i=1; i<numbers.size(); i++) {
if(numbers.get(i-1)!= numbers.get(i)) {
if(count>maxCount) {
maxCount=count;
result.clear();
result.add(numbers.get(i-1));
}else if(count==maxCount) {
result.add(numbers.get(i-1));
}
count = 1;
}else {
count++;
}
}
if(count==maxCount) {
result.add(numbers.get(numbers.size()-1));
}
// 빈도수에 따라 결과값 출력
if(maxCount!=1) {
System.out.println("최빈값:"+result+"\n");
System.out.printf("빈도수는 %d입니다.", maxCount);
}else {
System.out.println("최빈값 없다.");
}
}
}
'Algorithm > 알고리즘 문제 풀이' 카테고리의 다른 글
알고리즘 (6월 13일) (0) | 2022.06.13 |
---|---|
알고리즘 (6월 12일) (0) | 2022.06.12 |
알고리즘 (6월 9일) (0) | 2022.06.09 |
알고리즘 (6월 8일) (0) | 2022.06.08 |
알고리즘 (6월 7일) - (2) (0) | 2022.06.07 |