today_is
알고리즘 - 연탄의 크기 ( Lv. 2 / java) 본문
https://softeer.ai/practice/7628
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
오늘은 프로그래머스 대신에,
실제 기업에서 나올 법한 문제를 풀어보았다 !
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int arr[] = new int[num];
for(int i=0; i < num; i++) {
arr[i] = sc.nextInt();
}
HashMap<Integer, Integer> map = new HashMap<>();
for(int i=0; i < num; i++) {
for(int j=2; j <= arr[i]; j++) {
if(arr[i] % j == 0) {
map.put(j, map.getOrDefault(j, 0) + 1);
}
}
}
int answer = Collections.max(map.values());
System.out.print(answer);
}
}
한 줄씩 해석
scanner 객체를 만든다
num 변수에 첫번째 입력값인, 집의 개수를 받아온다
num 만큼 arr배열을 만든다
for문을 이용하여, 난로의 반지름 값을 받아온다 {
받아온 값은 arr에 넣어둔다
}
Interger, Integer 형태로 HashMap 객체를 만든다
for문을 이용하여, num 까지 i++ {
for문을 이용하여, arr[i] 까지 j++ {
만약, arr[i]가 j로 나누어진다면 {
map.put으로 key는 j , value는 약수의 개수를 담는다
}
}
}
map의 value값 중에서 가장 큰 수를 answer에 담기
answer 출력
틀린 부분
첫번째 시도 - 배열로 풀기
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = new int[num];
for (int i = 0; i < num; i++) {
arr[i] = sc.nextInt();
}
int answer = 0;
for (int i = 0; i < num; i++) {
int check = 0;
for (int j = 0; j < num; j++) {
if (arr[i] >= 2 && arr[j] % arr[i] == 0) {
check++;
}
}
if (answer < check) {
answer = check;
}
}
System.out.print(answer);
sc.close();
}
}
처음에는 배열로도 충분히 풀 수 있을 것 같아서 배열로 풀었는데
계속 테스트 케이스 9와 20번만 오답이라고 떴다
이유도 모르겠고 배열로 푸는게 비효율적인 것 같아서
좀 더 직관적으로 생각할 수 있는 HashMap으로 바꿔서 풀었다.
근데 또 똑같이 9번과 20번이 오답이라고 떴다
방식을 바꿨는데도 같은 테스트 케이스에서 오답이라는 것은
내가 문제를 잘못이해하고 푼 것 일수도 있겠다는 생각이 들었다
주어진 arr배열에서 약수가 될 수 있는 수를 구하는게 아니라,
주어진 arr배열 중에서 약수를 많이 가지고 있는 수를 구해야 하는 것임을 이제서야 알았다.
다시 바꿔서 풀었더니 바로 정답으로 떴다
문제를 제대로 이해하는 것도 참 중요하다....

