반응형

Computer Science 43

백준 15651번 N과 M (3)

백준 15651번 N과 M (3) 문제이다. 문제는 다음과 같다. 이전 N과 M 문제들과 비슷하다. 이번에는 중복이 허용되어 있다. 역시 같은 백트래킹 문제이다. 이번에는 중복이 허용되기 때문에 check 배열이 필요가 없다.(만들어놓고 쓰질 않았다...) 그대로 모든 경우를 돌려 수열이 완성되면 출력하도록 만들어주었다. 언어는 java를 이용하였다. 입출력을 System을 이용하여 했더니 시간초과가 나와서 Buffer를 사용해주었다. 백준에서 풀때는 항상 이 방법을 사용하도록 해야겠다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader..

백준 15650번 N과 M (2)

백준 15650번 N과 M (2) 이다. 이전 N과 M (1)과 문제가 비슷하다. 이번에는 오름차순이어야 한다는 조건이 추가되었다. 이번에도 역시 백트래킹 문제이다. 이번에는 한 숫자를 골랐다면 다음자리에는 그보다 작은 숫자가 올 수 없기 때문에 check 배열에서 고른 숫자 이하의 자리는 모두 +1 해주고 빠져나오면 -1을 해 주었다. 물론 고를때에는 1이 아닌것으로가 아닌 0인지로 판단해주었다. 언어는 python을 사용하였다. def func(cnt): if cnt == m: for i in range(m): print(list1[list2[i]], end = ' ') print() for i in range(n): if check[i] == 0: for j in range(i+1): check[j..

백준 15649번 N과 M (1)

백준 15649번 N과 M (1) 문제이다. 문제는 다음과 같다. 문제만으로 규칙을 모르겠다면 입출력을 봐주자. 문제가 파악되었다면 문제를 풀어보자. 이번 문제는 백트래킹 문제이다. 두번째 입력값인 m이 수열의 길이이기 때문에 이 값을 하나씩 증가시키며 모든 경우를 살펴보고 조건에 맞다면 출력하도록 짜준다. 언어는 C++을 이용하였다. #include using namespace std; int n, m; int arr[8]; int arr2[8]; int check[8] = {0,}; void func(int cnt){ if(cnt == m){ for(int i = 0; i m; for(int i = 0; i < n; i++){ arr[i] = i + 1; } ..

백준 1436번 영화감독 숌

백준 1436번 영화감독 숌 문제이다. 문제는 다음과 같다. 숫자 N이 주어지게 되면 N번째 666이 들어간 숫자를 찾으면 된다. 브루트포스 유형의 문제이기 때문에 숫자를 하나씩 모두 확인해주자 666이 가장 먼저 나오는 숫자는 666이기 때문에 666부터 시작하여 모든 숫자를 확인하고 666이 들어있다면 count를 1 씩 증가하여 입력값인 N과 같은 값이라면 해당 값을 출력하도록 만들어 주었다. 언어는 C++을 사용하여 프로그래밍 하였다. #include #include using namespace std; int main(){ std::ios_base::sync_with_stdio(false); int n; std::cin >> n; int a = 666; int count = 0; while(1)..

백준 1018번 체스판 다시 칠하기

백준 1018번 체스판 다시 칠하기 문제이다. 문제는 다음과 같다. M*N의 색깔이 칠해진 판이 주어지고 해당 판에서 8*8의 구간을 골라 체스판을 만드는데 체스판은 흰색과 검정색이 번갈아 나오는 체스판을 만들어야 한다. 가장 적게 칠해서 체스판을 만드는 경우 몇번만 칠하면 되는지를 구하는 문제이다. 브루트포스 유형의 문제이기 때문에 하나하나 확인해 보도록 한다. 체스판은 8*8의 크기이고 해당 크기로 주어진 판에서 자를 수 있는 모든 경우를 확인해보자 언어는 ruby를 사용하여 프로그래밍 하였다. def find1(arr, m, n) result = 64 for i in 0...m-7 for j in 0...n-7 count = 0 for k in 0...8 a = k % 2 for l in 0...8..

백준 7568번 덩치

백준 7568번 덩치 문제이다. 브루트포스 유형의 문제이다. 간단히 설명하면 각각의 사람의 입장에서 몸무게와 키가 모두 자기보다 큰 사람이 자기보다 덩치가 큰 사람이고 자기보다 덩치가 큰 사람의 수 + 1 한 값이 자신의 등수가 된다. 브루트포스 유형이므로 각각의 사람 입장에서 자기보다 덩치 큰 사람의 수를 구해 +1 한 값을 하나씩 출력하도록 코딩해보자 이번 문제는 java로 프로그래밍 했다. import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int[][] a = new int[n][2];..

백준 2231번 분해합

백준 2231번 분해합 문제이다. 브루트포스 유형의 문제이다. 분해합에 대한 설명이 주어졌다. 해당 숫자와 각 자리의 숫자를 모두 더한 값을 분해합이라 정의하고 있고 원하는 문제의 답은 분해합을 구하는 것이 아닌 해당 분해합을 가지는 가장 작은 숫자를 구하는 것이 문제이다. 역시 브루트포스 문제이기 때문에 하나하나 확인하면 될것이다. 0부터 해당 숫자까지의 숫자들을 하나하나 분해합을 구해 해당 숫자가 되면 멈추고 출력하도록 만들어 주었다. 코드는 python 언어를 사용하였다. def bunhehap(n): tmp = n i = 1 result = n while True: tmp = tmp // 10 if tmp == 0: break i += 1 for j in range(i): result += (n ..

백준 2798번 블랙잭

백준 2798번 블랙잭 문제이다. 브루트포스 유형의 문제이다. 문제는 다음과 같다. 주어진 카드 중에서 3장을 골라 주어진 M 값에 가깝도록 만들어 주어야 한다. 브루트포스 문제이기 때문에 하나하나 확인해서 M에 가까운 값을 찾으면 된다. for문 3개를 중첩해 모든 3개의 수를 고르는 경우의 수를 확인하여 합이 M에 가장 가까운 값을 찾도록 했다. 프로그래밍 언어는 C언어를 사용했다. #include #include int main(){ int n, m; scanf("%d %d", &n, &m); int* arr; arr = (int*)malloc(sizeof(int)*n); for(int i = 0; i < n; i++){ scanf("%d", arr + i); } int sum = 0; int ch..

백준 11729번 하노이의 탑 이동 순서

백준 11729번 재귀로 유명한 하노이의 탑 문제이다. 문제는 다음과 같다. 일반적인 하노이의 탑 문제이다. 입력값과 출력값, 예제가 주어져 있다. 출력은 총 움직인 횟수를 먼저 출력하고 움직임을 하나씩 출력하도록 되어있다. 언어는 ruby를 사용하여 프로그래밍 하였다. def move(n,st,en,si) if n == 2 puts "%d %d" %[st, si] puts "%d %d" %[st, en] puts "%d %d" %[si, en] return end move(n-1, st, si, en) puts "%d %d" %[st, en] move(n-1, si, en, st) end a = gets() a = a.to_i sum = 1 for i in 0...a-1 sum = sum * 2 + 1..

오탐(false positive), 미탐(false negative)

여러 분야에서 쓰이는 말이지만 보안 솔루션을 기반으로 써 보고자 한다. 탐지에 대한 내용이기 때문에 IDS(침입탐지솔루션)를 기준으로 이야기를 해보자 외부에서 패킷이 유입될 때 IDS는 해당 경로에 미러 방식을 통해 연결이 되어있다. 이 때 유입되는 패킷의 정상 비정상 유무와 IDS의 탐지 유무에 따라 4가지의 결과가 도출된다. 정상 패킷 비정상 패킷 정상으로 탐지 True Positive False Negative(미탐) 비정상으로 탐지 False Positive(오탐) True Negative 정상 패킷 , 정상으로 탐지 (True Positive) -> 정상 패킷을 정상으로 탐지했기 때문에 문제가 되는 결과가 아니다. 정상 패킷, 비정상으로 탐지(False Positive) -> 정상 패킷을 비정상..

반응형