알고리즘 3

[알고리즘] 백준 - PC방 요금 (9080)

1시간마다 시간을 체크하는 방식으로 문제를 푸는 방식이 편리하다. 맨처음 진입조건에서 22시 ~ 3시에 pc방 이용을 시작하고 남은 시간이 300분 이상 남았으면 정액제를 이용한다. 두번째 진입조건부터는 남은시간이 300분 이상인지만 체크하면 된다. 아니라면 일반 사용으로 계산한 후 2번 조건으로 진입하거나 남은 시간을 다 소진할 때까지 다시 반복하여 진행한다. 생각없이 문제를 풀면 어려운 문제인것 같다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; //https://..

알고리즘 2021.11.01

[알고리즘]프로그래머스 후보키

이 문제는 데이터베이스의 후보키의 개념을 알고 있더라도 문제에 접근하는 방법을 찾기가 쉽지 않았다. 첫 번째 방법으로는 dfs 혹은 bfs 를 활용하여 전체 경우의 수를 모두 탐색하는 방법을 떠올렸다. 제한 사항에 따르면 컬럼과 로우의 길이가 각각 8, 20 이하이기 때문에 dfs bfs 를 사용하여 풀 수 있을 것 같았지만 모든 칼럼의 부분집합의 경우의 수를 탐색하는 알고리즘을 떠올릴 수 없어 다른 방법을 찾아보기로 했다. 두 번째 떠오른 방법은 비트마스킹을 사용한 방법이다. for문을 사용하면 아래와 같은 방법을 통해서 해당 칼럼의 부분집합 전체를 순회할 수 있는 방법이었다. 0 = 0000 8 = 1000 1 = 0001 9 = 1001 2 = 0010 10 = 1010 3 = 0011 11 = 1..

알고리즘 2020.09.11

[알고리즘] 백준 2309 일곱 난쟁이

수학에서의 조합의 개념을 이용해서 풀어야 하는 문제이다. n C r = n-1 C r + n-1 C r-1 ex) 7 C 3 = 6 C 3 + 6 C 2 = 20 + 15 = 35 이 문제에서는 9 C 7 의 경우를 구하면 된다. 그리고 각 계층의 경우에서 해당 번호를 뽑았는지 안뽑았는지 2가지의 경우의 수가 나뉘기 때문에 visited라는 9개의 빈 공간을 가진 visited[9] 배열에 체크가 필요하다. 각 계층에서 끝에 도달하여 9개가 모두 체크가 완료 되었을 때 해당 배열에서의 true 값들만 뽑아낸다면 전체의 경우를 모두 탐색할 수 있고 그 값들 중에서 조건식에 맞는 경우에만 출력을 한다면 알고리즘 완성이다. package b2309; import java.io.*; import java.uti..

알고리즘 2020.03.23