이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

Programming/백준

  • 포렌식 & 개발 이야기 - Forensics & Development
백준 2015 - 수들의 합 4 (파이썬)

백준 2015 - 수들의 합 4 (파이썬)

2025.02.24
분류 : 누적합링크 : https://www.acmicpc.net/problem/2015풀이부분합을 활용하여 특정 구간 합이 K가 되는 경우의 수를 찾는 문제이다.단순한 방법으로는 O(N^2) 시간 복잡도로 모든 구간을 확인 할 수 있지만, 주어진 N의 최대값이 200,000 이므로, 이는 비효율적인 방법이다.따라서, 누적합과 해시맵을 활용하여 O(N)으로 해결해야한다.psum = [0] * Npsum[0] = A[0]for i in range(1, N) : psum[i] = psum[i - 1] + A[i]psum[i] 는 A[0] 부터 A[i] 까지의 합을 저장하는 누적합 배열이다.psum[i] = psum[i - 1] + A[i]를 이용하여 이전 누적합에 현재 값을 다하는 방식으로 누적합을 구..
백준 20365 - 블로그2 (파이썬)

백준 20365 - 블로그2 (파이썬)

2025.02.24
https://www.acmicpc.net/problem/20365분류 : 그리디https://www.acmicpc.net/problem/20365풀이이 문제는 그리디 알고리즘을 활용하여 최소한의 작업 횟수로 문제들을 원하는 색상으로 칠하는 방법을 찾는것이다.주어진 문자열 S에서 연속된 같은 색상의 블록을 그룹화 하여 최소한의 횟수로 전체를 칠 할 수 있도록 해야한다.8BBRBRBBR예시로 위와 같은 예제가 있다면 색상을 그룹화 하면 다음과 같다.BB | R | B | R | BB | R즉, B 그룹: 3개, R 그룹: 3개이 경우, 한쪽 색상만을 먼저 칠하고, 나머지를 한 번에 칠하는 것이 최소 작업 횟수를 보장한다.문제 풀이의 주요한 알고리즘연속된 같은 색상을 하나의 그룹으로 압축압축된 그룹에서 B ..
백준 10844 - 쉬운 계단 수 (파이썬)

백준 10844 - 쉬운 계단 수 (파이썬)

2025.02.23
분류 : 다이나믹 프로그래밍https://www.acmicpc.net/problem/10844풀이먼저 문제 이해를 하면 다음과 같다.계단 수는 인접한 모든 자리의 차이가 1인 수이다.N이 주어질 때, 깊이가 N인 계단 수의 갯수를 구하는 문제이다.0으로 시작하는 수는 계단 수가 아니다.결과는 10^9로 나눈 나머지를 출력해야한다.문제 풀이를 위해서 DP 알고리즘을 사용한다.dp[i][j]를 길이가 j이고 마지막 숫자가 i인 계단 수의 갯수라고 정의한다.점화식을 세우면 다음과 같다.dp[j][i] = dp[j-1][i-1] + dp[j+1][i-1]즉, 길이가 i이고 끝자리가 j인 계단 수는 이전 자리(i-1)에서 끝자리가 j-1이거나 j+1이었던 경우의 합이다.초기 조건으로는dp[0][1] = 0 (0으..
백준 14889 - 스타트와 링크 (파이썬)

백준 14889 - 스타트와 링크 (파이썬)

2025.02.22
분류 : 브루트포싱https://www.acmicpc.net/problem/14889풀이문제 분석을 하면 다음과 같다.N명의 사람을 두 개의 팀으로 나누어야한다.S[i][j]는 i번 사람과 j번 사람이 같은 팀일때 더해지는 능력치이다.두팀의 능력치 차이를 최소화 해야한다.능력치는 대팅이 아닐 수 있으며, 대각선 값은 항상 0이다.40 1 2 34 0 5 67 1 0 23 4 5 0예제의 값을 생각해보면 다음과 같이 풀이 할 수 있다. 일단 가능한 팀 조합은 다음과 같다.(1, 2) vs (3 , 4) → 능력치 차이 | 5 - 7 | = 2(1, 3) vs (2, 4) → 능력치 차이 | 9 - 10 | = 1(1, 4) vs (2, 3) → 능력치 차이 | 6 - 6 | = 0문제 풀이를 위한 해결 방..
백준 11726 - 2 x n 타일링 (파이썬)

백준 11726 - 2 x n 타일링 (파이썬)

2025.02.21
분류 : 다이나믹 프로그래밍https://www.acmicpc.net/problem/11726풀이점화식을 새워야 한다. 일단 An : 2 * n 타일을 1 * 2, 2 * 1 타일로 채우는 경우의 수를 생각해야한다.An = A(n - 1) + A(n - 2) 라는 점화식을 세울 수 있다.즉 이 문제를 생각해 보면, 숫자가 너무 커지기 때문에 일단 10007로 나눈다는 조건을 생각해야한다.먼저 dp 배열에 들어갈 초기 값을 생각한다.1번의 dp는 2 * 1 타일에 들어 갈수 있는 타일은 1개이다.2번의 dp는 2 * 2 타일에 들어 갈 수 있는 타일은 총 2개이다.1 * 2 타일 2개인 방법 1개2 * 1 타일 2개인 방법 1개예시를 생각해보자, 2 * 5 크기의 직사각형을 채운 한 가지 방법의 예를 확인..
백준 1759 - 암호 만들기 (파이썬)

백준 1759 - 암호 만들기 (파이썬)

2025.02.21
https://www.acmicpc.net/problem/1759문제암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있다고 알려져 있다. 또한 정렬된 문자열을 선호하는 조교들의 성향으로 미루어 보아 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라고 추측된다. 즉, abc는 가능성이 있는 암호이지만 bac는 그렇지 않다.새 보안 시스템에서 조교들이 암호로 사용했을 법한 문자의 종류는 C가지가 있다고 한다. 이 알파벳을 입수한 민식, 영식 형제는 조교들의 방에 침투하기 위해 암호를 추측해 보려고 한다. C개의 문자들이 모두 주어졌을 때, 가능성 있는 암호들을 모두 구하는 프로그램을 작성하시오.바로 어제 최백..
백준 2579 - 계단 오르기 (파이썬)

백준 2579 - 계단 오르기 (파이썬)

2025.02.03
https://www.acmicpc.net/problem/2579전형적인 DP 문제이다..이 문제의 조건은 다음과 같다.1. 연속된 3개 계단을 모두 밟으면 안된다.2. 마지막 도착 계단은 반드시 밟아야한다.3. 계단은 한번에 한 계단 또는 두 계단씩 오를 수 있다.위 그림의 예제에서는 6개의 계단이 주어진다.S = 10, 20, 15, 25, 10, 201. 마지막 층인 20은 무조건 밟아햔다. 그럼 10을 밟게 되면 25는 못 밟으니까, 10을 버리고 25를  밟는게 최적2. 15를 밟게 되면 10, 20을 못밟으니까, 15를 버리고, 10, 20을 밟는게 이득3. 총 4개를 밟는 것이 최선, 총 75의 값을 가지게 된다.수열로써 값을 나타내면 다음과 같다.1. aN은 N번째, 최대 점수 (바로 전 ..
백준 11725 - 트리의 부모 찾기

백준 11725 - 트리의 부모 찾기

2025.02.01
https://www.acmicpc.net/problem/11725 먼저 예제 1번을 바탕으로 문제를 이해하면, 71 66 33 54 12 44 7 (그리면서 풀면 더 쉽다..)2번 노드 -> 4번3번 노드 -> 6번4번 노드 -> 1번5번 노드 -> 3번6번 노드 -> 1번7번 노드 -> 4번1번부터 N번까지의 노드가 있다. 입력받은 인접한 두 노드를 트리로 완성하고, 각 노드의 부모가 누구인지 확인하는 문제이다.import syssys.setrecursionlimit(10**6)# input = sys.stdin.readline()N = int(input())adj = [[] for _ in range(N)] # 인접리스트for i in range(N - 1) : a, b = list(map(i..
백준 2606 - 바이러스

백준 2606 - 바이러스

2025.02.01
https://www.acmicpc.net/problem/2606해당 문제는 그래프로도 풀어봤고, 새로운 풀이인 DFS로 풀이를 진행하였다.N = 컴퓨터의 수, M은 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수그 이후부턴, 한줄에 한쌍씩 네트워크 상에서 직접 연결되어 있는 컴퓨터의 번호 쌍이 주어진다.해당 문제에서 DFS를 적용한 이유는 다음과 같다."단순히 그래프로도 풀이를 할수 있지만, DFS 알고리즘을 사용하면 시간복잡도가 O(2M)이 된다.'먼저 N, M을 입력받고, adj 배열에 각각 컴퓨터를 연결시킨다.N = int(input())M = int(input())adj = [[] for i in range(N)]for _ in range(M) : a, b = list(map(int,..
[백준] 4673 - 셀프 넘버 (파이썬 / C++)

[백준] 4673 - 셀프 넘버 (파이썬 / C++)

2020.04.09
general = set(range(1, 10001)) change = set() for i in range(1, 10001): for j in str(i): i += int(j) change.add(i) result = general - change for i in sorted(result): print(i) #include using namespace std; bool selfnum[10001]; int main(void) { memset(selfnum, true, sizeof(selfnum)); for(int i=1; i
[백준] 15596 - 정수 N개의 합 (파이썬)

[백준] 15596 - 정수 N개의 합 (파이썬)

2020.04.09
def solve(a): ans = 0 for i in a: ans += i return ans
[백준] 4344 - 평균은 넘겠지 (파이썬) (C)

[백준] 4344 - 평균은 넘겠지 (파이썬) (C)

2020.04.09
import sys input = sys.stdin.readline N = int(input()) for i in range(N): list_temp = list(map(int, input().split(' '))) average = sum(list_temp[1:]) / list_temp[0] count = 0 for j in list_temp[1:]: if j > average: count += 1 print(str('%.3f' % round(count / list_temp[0] * 100, 3)) + '%') #include int main() { int num; float sum=0; float count=0; int stu_num; int score[1000]; scanf("%d", &num); ..
[백준] 8958 - OX퀴즈 (파이썬) (C++)

[백준] 8958 - OX퀴즈 (파이썬) (C++)

2020.04.09
N = int(input()) for i in range(N): score = 0 cnt = 0 result = input() for j in range(len(result)): if result[j] == 'O': cnt += 1 score += cnt elif result[j] == 'X': score += 0 cnt = 0 print(score) #include #include using namespace std; int main() { int num; cin >> num; int *save_total = new int[num]; for (int i = 0; i > answer; for..
[백준] 1546 - 평균 (파이썬)

[백준] 1546 - 평균 (파이썬)

2020.04.08
N = int(input()) score = list(map(int, input().split())) modify = [] for i in score: modify.append(i/max(score) * 100) print("%0.2f" % (sum(modify) / N)) 먼저 N에 과목의 개수를 입력받는다. 그후 list와 map, split을 통해서 과목의 점수를 score 리스트에 담는다. 그후 조작하고 나서 저장할 변수은 modify를 선언한다. 그후 score에서 값을 하나씩 꺼내와서 score의 가장 높은 점수로 나눠주고, 100을 곱해주고 modify 변수에 저장한다. 그후 마지막에 모든 modify 값들을 더하고 과목의 개수로 나눠주면, 조작된 평균을 구할 수 있다.
[백준] 3052 - 나머지 (파이썬)

[백준] 3052 - 나머지 (파이썬)

2020.04.08
num_list = [] for i in range(10): temp = int(input()) num_list.append(temp % 42) num_list = set(num_list) print(len(num_list)) 먼저 num_list의 배열을 선언하고, 10개의 수를 입력받는다. 수를 입력 받음과 동시에 주어진 조건인 42로 나눠주고, 나머지를 num_list에 저장한다. 그 후 set 함수를 통해서 중복 값을 제거해주고, 리스트의 개수를 출력한다.
  • 최신
    • 1
    • ···
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 다음

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (428) N
    • Forensics (103)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (22)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (18)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (239) N
      • C (10)
      • Python (11)
      • 백준 (185) N
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 디지털포렌식
  • pental
  • Forensics
  • 프로그래머스
  • 파이썬
  • 백준
  • 포렌식
  • axiom
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바