일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디지털 포렌식
- Programmers
- 자라나는새싹
- 백준
- 드림핵
- 포렌식
- 알고리즘
- c
- 인프런
- 자라나는 새싹
- 스터디
- Python
- hacking
- injection
- 풀이
- XSS
- CSRF
- 웹해킹
- Web
- 워게임
- Algorithm
- dreamhack
- WarGame
- command
- C언어
- BaekJoon
- WHS
- 문제풀이
- 파이썬
- 프로그래머스
- Today
- Total
목록Algorithm (42)
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부터 분해합까지의 범위 안에서 반복문..

1, 2, 3 더하기 import sysread = sys.stdin.readlinecache = [0] * 11cache[1] = 1cache[2] = 2cache[3] = 4for i in range(4, 11): cache[i] = sum(cache[i-3:i])T = int(read())for _ in range(T): print(cache[int(read())]) 다이나믹 프로그래밍이다.https://myjamong.tistory.com/302 백준 9095 파이썬 - 1,2,3 더하기 - 동적 계획법, DFS백준 9095 파이썬 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타..

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

n의 배수 간단하다. 연산자 %과 조건문을 사용하여 나머지가 0인지 아닌지 판단해주면 된다. def solution(num, n): if(num%n==0): answer=1 else: answer=0 return answer 코드 실행결과 잘 작동한다. 굿굿 다른사람 풀이를 보니까 신기한 방법으로 풀었길래 그것에 대한 설명도 첨부한다. def solution(num, n): return int(not(num % n)) 굉장히 짧고 간결하다. num % n의 값이 0인지 비교하는게 아니라 int 형으로 비교한게 인상적이다. int(not())인 이유가 not 논리연산자는 값을 True와 False로 내는데 이걸 숫자로 바꾸기 위해 int를 사용했기 때문이다. 매우 흥미로운 풀이였다. 공배수 이것또한 간단하..

이건 백트래킹 문제이다. - 길을 가다가 이 길이 아닌 것 같으면 왔던 길로 되돌아가 다른 경로로 진행 - 보통 재귀로 구현하며 조건이 맞지 않으면 종료한다. - 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..