Algorithm101 모의 SW 역량테스트(수영장) [수영장] * 로직 재귀를 사용해 DFS를 돌려 모든 경우의 수를 고려하면 된다. 우선 1월~12월까지 모두 수영장을 이용하는 일수가 존재하지 않다면 -> answer = 0으로 리턴한다 만약 존재하는 상황이라면 우선적으로 1년 이용권을 사용한 경우로 answer를 갱신한 뒤 재귀함수를 진행한다 현재 index의 값(Month[])이 0이라면 -> 값 갱신 없이 다음 index를 호출한다 1 이상이라면 -> 3가지 경우를 호출한다 1일 이용권 사용하는 경우 1달 이용권 사용하는 경우 3달 이용권 사용하는 경우 위 과정을 반복하며 최솟값을 갱신한다 // 수영장 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr.. 2020. 4. 16. 알고리즘(위장) [위장] * 로직 우선 종류에 맞게끔 옷들을 해쉬맵에 보관한다 각각 종류에는 옷들의 개수가 존재한다 단순하게 생각해보면 결국 모든 경우의 수를 구한다 nC1 + nC2 + ... + nCr (최소 한벌은 입어야 하기 때문에) 여기서 좀 더 발전시켜 생각해보면 (각 종류에 존재하는 옷의 개수 + 1)을 함으로써 해당 종류의 옷을 선택하지 않은 경우를 추가할 수 있다 (A종류의 옷+1) * (B종류의 옷+1) * (C종류의 옷+1)을 하게되면 3가지 종류에 존재하는 옷들로 만들 수 있는 모든 경우의 수를 구할 수 있게된다 주의할 점은, 모두 옷을 선택하지 않은 경우가 포함되기 때문에 -1을 해줌으로써 답을 구할 수 있게된다 //위장 import java.io.*; import java.util.*; clas.. 2020. 4. 15. 알고리즘(소수 찾기, 더 맵게, H-Index) [소수 찾기] * 로직 1개부터 numbers.length()개 만큼 뽑는 경우의 수를 모두 구한다 (각 순열의 합) 경우의 수를 구하게 되면 해당 숫자가 이전에 존재했는지 확인한다 존재하지 않았다면 소수 판별을 진행하고, 만약 소수라면 개수를 카운팅한다 해당 경우의 수를 마킹한다 위 과정을 반복한다 //소수찾기 import java.util.HashMap; import java.util.LinkedList; public class Problem_FindPrimeNum { static boolean[] checekd; static HashMap hashMap; static int result; public static void main(String[] args) { String numbers = "011.. 2020. 4. 14. 이전 1 ··· 8 9 10 11 12 13 14 ··· 34 다음