[JAVA ]프로그래머스 - 소수 찾기(findPrimeNumbers) 42839
문제 : https://programmers.co.kr/learn/courses/30/lessons/42839
public class Solution {
public int solution(String numbers) {
int answer = 0;
List numList = new ArrayList();
Set resultSet = new HashSet();
for(int i=0; i<numbers.length(); i++) {
numList.add(String.valueOf(numbers.charAt(i)));
}
//순열생성
perm(numList, resultSet, 0);
//소수 확인
Iterator itr = resultSet.iterator();
while (itr.hasNext()) {
if(isPrime(itr.next())) {
answer++;
}
}
return answer;
}
//참고 (순열 생성)
public List perm(List list, Set resultSet,int pivot) {
if (pivot == list.size()) {
//System.out.println(list);
makeResultSet(list, resultSet);
}
for (int i = pivot; i < list.size(); i++) {
swap(list, i, pivot);
perm(list, resultSet, pivot + 1);
swap(list, i, pivot);
}
return list;
}
public void swap(List list, int i, int j) {
String a = list.get(i);
String b = list.get(j);
list.set(i, b);
list.set(j, a);
}
// 순열별 경우의수
public Set makeResultSet(List numList,Set resultSet){
// prefix 를 정하고 뒤를 순서대로 붙임
// 다음 프리픽스로 사용한 인덱스를 제거하고 반복하면서 리절트셋에 에드
for(int k=0; k<numList.size() ; k++) {
int fixIdx = k;
resultSet.add(Integer.valueOf(numList.get(k)));
List tempNumList = new ArrayList();
//고정 값을 제외하 나머지 요소를 담을 리스트를 생성합니다.
for(int i=fixIdx+1; i<numList.size();i++) {
tempNumList.add(numList.get(i));
}
for(int i=0; i< tempNumList.size();i++) {
// 두번째로 배치할 인덱스 == i
// 두번째 배치할 요소를 고려해서 큐를 생성합니다.
Queue q = new LinkedList();
List tempNumList2 = new ArrayList();
String resultNum = numList.get(fixIdx);
resultNum += tempNumList.get(i);
for(int j=0; j<tempNumList.size(); j++) {
if(i != j) {
resultNum += tempNumList.get(j);
}
}
resultSet.add(Integer.valueOf(resultNum));
makeResultSet(tempNumList,resultSet);
}
}
return resultSet;
}
private boolean isPrime(int num) {
if (num < 2) return false;
if (num == 2) return true;
if (num % 2 == 0) return false;
/**
* num 이 p * q 라고 할때 한 수는 항상 sqrt(num) 이하의 값을 갖는다. (ex, num = 24, p = [1, 2, 3, 4], q = [6, 8, 12, 24])
* 따라서 num 이 sqrt(num) 이하의 값중 하나로 나눠지는지 체크한다. (ex, 24 가 4 이하의 숫자로 나눠지는지 체크,, 1,2 는 예외)
*/
// 참고
int sqrtn = (int) Math.sqrt(num);
for (int i = 3; i <= sqrtn; i += 2) {
if (num % i == 0) return false;
}
return true;
}
'알고리즘' 카테고리의 다른 글
[JAVA ]프로그래머스 - 오픈채팅방(openChatRoom) 42888 (0) | 2020.01.13 |
---|
[JAVA ]프로그래머스 - 오픈채팅방(openChatRoom) 42888
문제 : https://programmers.co.kr/learn/courses/30/lessons/42888
public class Solution {
public String[] solution(String[] record) {
String[] answer;
//반환배열 길이(인풋된 record 길이에서 change동작은 제외한 길이)
int answerSize=0;
//동작유형배열
String[] operTypeArr = {"Enter","Leave","Change"};
//아이디,닉네임 맵
Map<String,String> uidMap = new HashMap<String,String>();
//동작, 반환값 맵
Map<String,String> answerMap = new HashMap<String,String>();
answerMap.put("Enter", "님이 들어왔습니다.");
answerMap.put("Leave", "님이 나갔습니다.");
// 입력받은 값을 2차원 배열에 담습니다
String[][] record2 = new String[record.length][3];
for(int i=0; i<record.length; i++) {
record2[i] = record[i].split(" ");
}
//아이디,닉네임맵에 정보를 담고 닉네임 변경을 반영합니다.
for(int j=0; j<record2.length; j++) {
if(record2[j][0].equals("Enter")) {
uidMap.put(record2[j][1], record2[j][2]);
answerSize++;
}else if(record2[j][0].equals("Change")) {
uidMap.replace(record2[j][1], record2[j][2]);
}else {
answerSize++;
}
}
answer = new String[answerSize];
//입력정보에서 uidMap에서 uid값을 키로 닉네임정보를 맵에서 불러 옵니다.(change동작은 제외)
//record 배열과 answer배열의 길이가 다르기때문에 배열 인덱스를 매칭시켜줄 변수를 정의합니다.
int answerIdx = 0;
for(int i=0; i<record2.length; i++) {
String operType = record2[i][0];
if(!operType.equals(operTypeArr[2])) {
answer[answerIdx]=uidMap.get(record2[i][1])+answerMap.get(operType);
answerIdx++;
}
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[JAVA ]프로그래머스 - 소수 찾기(findPrimeNumbers) 42839 (0) | 2020.01.13 |
---|
bitcoind 구동
bitcoin 블록체인의 체인데이터를 동기화 하기 위해 bitcoind를 실행합니다.
bitcoind가 설치된 디렉터리에서 ./bitcoind 혹은 스타드 쉘을 작성해서 실행하면 됩니다.
스타트 쉘은 EOS BP 중 하나인 CryptoLions 깃헙 자료를 참고로 만들었습니다. https://github.com/CryptoLions/scripts/blob/master/start.sh
!/bin/bash
DATADIR="bitcoind가 적치된 디렉터리 위치"
#stop bitcoind
$DATADIR/stop.sh
#start bitcoind
echo -e "Starting Bitcoind.. \n";
$DATADIR/bitcoind "$@" > $DATADIR/stdout.txt 2> $DATADIR/stderr.txt & echo $! > $DATADIR/bitcoind.pid
'BLOCKCHAIN' 카테고리의 다른 글
bitcoin.conf (for rpc) (0) | 2019.05.15 |
---|