728x90
1. 소수찾기
코딩테스트 연습 - 소수 찾기 | 프로그래머스 스쿨 (programmers.co.kr)
import java.util.*;
class Solution {
HashSet<Integer> madeNumbers = new HashSet<>(); //숫자카드로 만든 숫자조합 담을 HashSet
int answer = 0;
public int solution(String numbers) {
//1. 문자열을 하나씩 배열에 넣기
String[] numbersArrayString = numbers.split("");
//test
/*for (int s : numbersArrayString) {
System.out.println(s);
}*/
int length = numbersArrayString.length; //숫자카드 개수
boolean[] checked = new boolean[length]; //카드가 사용됐는지 체크용, 기본 false
//2. 문자형 배열을 int형 배열로 변환
int[] numbersArray = new int[length];
for (int i = 0; i < length; i++) {
numbersArray[i] = Integer.parseInt(numbersArrayString[i]);
}
//5. 카드를 한장씩 함수에 넣어줌
for (int i=0; i<length; i++) {
checked[i] = true; //처음 넣어준 카드를 checked 해주고
makeNumber(checked, numbersArray[i], numbersArray); //조합기에 돌림
checked[i] = false; //1을 다 넣고 7을 넣을 때 1의 checked를 다시 풀어줌
}
//HashSet 출력
/*Iterator<Integer> iterSet = madeNumbers.iterator();
while(iterSet.hasNext()) {
System.out.println(iterSet.next());
}
System.out.println("size:" + madeNumbers.size());*/
//6. HashSet의 원소 하나하나를 isPrime에 넣어서 확인 -- 근데 1, 0 제외해야함
Iterator<Integer> checkIsPrime = madeNumbers.iterator();
while(checkIsPrime.hasNext()) {
//System.out.println("checkIsPrime.next +1 is " + checkIsPrime.next() + 1);
int currentNum = checkIsPrime.next();
if(currentNum > 1) {
int isItPrimeNum = isPrime(currentNum);
if (isItPrimeNum == 1) {
answer ++;
}
}
currentNum = 0;
}
//test
/*Iterator<Integer> iterSet = primeNumbers.iterator();
while(iterSet.hasNext()) {
System.out.println(iterSet.next());
}*/
return answer;
}
//3. 소수판별 함수 만들기
public int isPrime(int n) {
//System.out.println("prime func :" + n);
for (int i = 2; i<=(int)Math.sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
//4. 숫자카드 조합 만드는 함수 만들기
public void makeNumber(boolean[] checked, int number, int[] numbersArray) { //이전에 조합한 숫자: result
madeNumbers.add(number); //HashSet에 추가
for (int i=0; i<numbersArray.length; i++) {
if(!checked[i]) { //사용되지 않은 숫자카드가 있으면
checked[i] = true; //그 카드를 맨 뒤에 붙여주고 true로 바꿈
makeNumber(checked, number*10 + numbersArray[i], numbersArray);
checked[i] =false; //그 카드를 넣고 다 돌렸으면 다시 checked를 풀어줌
}
}
}
}
2. 의상
코딩테스트 연습 - 의상 | 프로그래머스 스쿨 (programmers.co.kr)
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
/*필요한 정보
의상종류를 a, b, c ...x 라 두고
각 종류의 개수를 a1, a2, a3 ... an 총 n개라 두면
총 가지 수는
(na+1)(nb+1)(nc+1) ... (nx+1) - 1
이때 -1은 전부 다 안입었을 경우
즉 우리가 필요한 정보는 의상 종류의 수, 각 종류의 개수
*/
//1. 의상의 종류와 개수를 담을 배열 생성 (의상 종류, 의상 개수)
HashMap<String, Integer> map = new HashMap<>();
//2. map 채워넣기
for (int i = 0; i < clothes.length; i++) {
//clothKind[i] = clothes[i][1];
//처음 넣는 종류면
if (map.get(clothes[i][1]) == null) {
map.put(clothes[i][1], 1); //1개 새로 넣어줌
}
//이미 있는 종류면
else if (map.get(clothes[i][1]) != null) {
int x = map.get(clothes[i][1]);
map.put(clothes[i][1], x+1); //+1
}
}
//3. 의상 종류만 담은 배열 만들기 (중복 안되게)
HashSet<String> hash = new HashSet<>();
for (int i=0; i<clothes.length; i++) {
hash.add(clothes[i][1]);
} //중복 없애기 위해서 HashSet에 담아서 없애고 ..
String[] array = hash.toArray(new String[hash.size()]); //인덱스로 불러오기 위해서 배열로 변환
//System.out.println(Arrays.toString(array));
//4. 각 종류의 개수 + 1 씩 곱해줌
int answer = 1;
for (int i = 0; i < map.size(); i++) {
answer *= (map.get(array[i])+1);
}
return answer -1 ;
}
}
728x90
'Algorithm Study > Programmers' 카테고리의 다른 글
[프로그래머스] 과일 장수 / 영어 끝말잇기 (Java) (0) | 2023.07.10 |
---|---|
[프로그래머스] 귤 고르기 / 삼총사 / 자연수 뒤집어 배열로 만들기 (Java) (0) | 2023.07.09 |
[프로그래머스] 체육복 / 가장 가까운 같은 글자 (Java) (0) | 2023.07.03 |
[프로그래머스] 최소 직사각형 / 타켓 넘버 / 완주하지 못한 선수 / 모의고사 (Java) (0) | 2023.06.11 |
[프로그래머스] 폰켓몬 / 같은 숫자는 싫어 / K번째 수 (Java) (0) | 2023.06.05 |