일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 풀이
- Algorithm
- C언어
- 워게임
- 드림핵
- CSRF
- command
- 알고리즘
- 자라나는 새싹
- dreamhack
- 백준
- c
- BaekJoon
- 포렌식
- WHS
- 문제풀이
- hacking
- injection
- 웹해킹
- 프로그래머스
- Web
- 자라나는새싹
- 디지털 포렌식
- Python
- 인프런
- 파이썬
- 스터디
- Programmers
- WarGame
- XSS
- Today
- Total
목록Algorithm/Baekjoon (17)
Hoin's security

2231번 분해합123이라는 입력값이 들어왔을 때 이걸 쪼개서 다른 변수에 저장하게끔 만들어주면 될 것 같다.n = int(input()) #분해합을 입력값으로 받음for i in range(1, n+1): #생성자 찾기 num = sum((map(int, str(i)))) # i의 각 자릿수를 더함 num_sum = i + num # 분해합 = 생성자 + 각 자릿수의 합 # i가처음으로 분해합과 입력값이 같을때가 가장 작은 생성자를 가짐. if num_sum == n: print(i) break if i == n: #i와 입력값이 같으면 생성자 없는거. print(0) 분해합 값을 입력받고 1부터 분해합까지의 범위 안에서 반복문..

1520번 내리막길 https://www.acmicpc.net/problem/1520 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 일단 이거 내가 못푼다. 구글의 도움을 받아서 해결해보자.. DFS, DP라는 용어가 반복되어서 보인다. DFS : Depth first search의 약자로서 그래프 자료에서 데이터를 탐색하는 알고리즘이다. 위에서 아래로 찾는 방식이고 스택 자료구조를 이용한다. 동작 구조는 아래와 같다. 위 사진 에서 노드들을 찾아가는 순서는 이와 같다. A가 갈 수 있는건 B와 C인데 기본적으로..

이건 백트래킹 문제이다. - 길을 가다가 이 길이 아닌 것 같으면 왔던 길로 되돌아가 다른 경로로 진행 - 보통 재귀로 구현하며 조건이 맞지 않으면 종료한다. - DFS(깊이 우선 탐색) 기반 n,m= map(int,input().split()) s = [] def dfs(): if len(s)==m: print(' '.join(map(str,s))) return for i in range(1,n+1): s.append(i) dfs() s.pop() dfs() 설탕 배달 sugar = int(input()) bag = 0 while sugar >= 0 : if sugar % 5 == 0 : # 5의 배수이면 bag += (sugar // 5) # 5로 나눈 몫을 구해야 정수가 됨 print(bag) br..

위 문제는 백트래킹 문제이다. 백트래킹은 DFS(Depth-First Search, 깊이 우선 탐색)의 방식을 기반으로, 불필요한 경우를 배제하며 원하는 해답에 도달할 때까지 탐색하는 전략이다. DFS를 기반으로 두고 있기 때문에 스택(Stack)을 이용해 퇴각을 하며 다음 탐색을 진행하기 때문에 백트래킹(또는 퇴각검색)이라 불린다. 백트래킹은 기본적으로는 모든 경우의 수를 탐색한다는 브루트 포스(Brute Force) 전략을 취하지만, 처리 속도를 향상시키기 위한 가지치기(Pruning)가 중요한 역할을 한다. n, m = map(int, input().split()) s = [] def f(): if len(s) == m: print(' '.join(map(str, s))) return for i i..

공 바꾸기 (10813번) 문제는 위와 같다. n, m=map(int, input().split()) box = [i for i in range(1,n+1)] for _ in range(m): i, j = map(int, input().split()) temp = box[i-1] box[i-1]=box[j-1] box[j-1]=temp for b in box: print(b, end=' ') 꽤나 쉽다. temp 변수 사용해서 위치 바꿔주면 된다. 큐 2 (18258번) 문제는 위와 같다. 시간 초과 오류 발생해서 deque를 사용하 코드를 수정했다. import sys from collections import deque n = int(input()) queue = deque([]) for i in r..

A = int(input()) B = int(input()) C = int(input()) result = list(str(A*B*C)) for i in range(0,10): count = 0 for num in result: if i == int(num): count += 1 print(count) N, M = map(int,(input().split())) d = list(map(int, input().split())) # 카드 리스트 result = 0 Max = 0 for i in range(N-2): # 3중 for문을 돌면서 겹치지 않게 범위를 지정 for j in range(i+1,N-1): for k in range(j+1,N): if d[i]+d[j]+d[k] > M: # 3개의 값 더..

스택 2 (28278번) import sys input = sys.stdin.readline N = int(input()) stack = [] for _ in range(N): command = input().rstrip() #push if len(command) > 2: stack.append(int(command[2:])) #pop elif command == '2': if len(stack)==0: print(-1) else: print(stack.pop()) #size elif command == '3': print(len(stack)) #empty elif command == '4': print(1 if len(stack)==0 else 0) #top elif command == '5': if ..

2164번 문제와 예제는 위와 같다. from collections import deque N = int(input()) deque = deque([i for i in range(1, N+1)]) while(len(deque) >1): deque.popleft() move_num = deque.popleft() deque.append(move_num) print(deque[0]) 보통 큐(queue)는 선입선출(FIFO) 방식으로 작동한다. 반면, 양방향 큐가 있는데 그것이 바로 데크(deque)다. deque는 시작점의 값을 넣고 빼거나, 끝 점의 값을 넣고 빼는 데 최적화된 연산 속도를 제공한다. 따라서, 대부분의 경우의 deque는 list보다 좋은 옵션이며 특히 push/pop연산이 많을 경우 l..

백준 10773번 문제를 파이썬으로 풀어보겠다. 스택은 데이터의 삽입과 삭제가 데이터의 가장 한쪽 끝에서만 일어나는 자료구조로 가장 마지막에 삽입된 데이터가 가장 먼저 사용되거나 삭제된다. 데이터를 삽입하는 과정을 push, 가장마지막에 삽입한 데이터를 삭제하는 과정을 pop라고 부른다. count = int(input()) # 입력받을 총 숫자의 수 stk = [] # 스택 리스트 for i in range(count): num = int(input()) if(num == 0): #num이 0이면 pop stk.pop() #pop()함수는 맨 마지막 원소를 리턴하고 해당 원소는 삭제함. else: stk.append(num) #그게 아니라면 append = push #append() 안에 값을 입력하면..

백준 1978번 문제를 풀어보겠다. 문제는 위와 같다. 소수는 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수를 말한다. 이를 판별하는 방법은 입력받은 숫자를 2부터 입력받은 수-1까지 나누어 보았을 때 나누어 떨어지면 소수가 아닌 것으로 찾는 방법과 에라토스테네스의 체 알고리즘을 사용하는 방법이 있다. 전자는 효율이 떨어지기 때문에(속도가 느림.) 후자를 기준으로 살펴본다. 에라토스테네스의 체는 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법이다. 이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체'라고 부른다. 에라토스테네스의 체 알고리즘은 여러 개의 수가 소수인지 아닌지를 판별할 때 사용하는 대표적인 알고리즘이고 N보다 작거나 같은 모든 소수를 찾을 ..