일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인턴 후기
- 인턴 지원
- frontend
- PyAmdecoder
- riceteacatpanda
- 정보보호병 후기
- Forensic 절차
- spring
- EER
- 3단계 지역 DB
- react
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
- Database
- mysql
- SessionAttribute
- 소프트웨어 개발보안 경진대회
- 소개딩
- restapi
- 행정지역 DB
- Django
- 네이버 인턴
- JSTL
- webhacking 처음
- reversing.kr
- 동읍면 DB
- DBMS
- 메모리 포랜식
- jsp
- Layered Architecture
- 방명록 만들기
- Today
- Total
목록분류 전체보기 (246)
웹찢남

그리디 알고리즘 문제다. 단순한 문제인데 골드로 평가된 이유는 hidden case 가 좀 있다. 신경써야 할 사항은 1. 음수와 음수의 곱 2. 음수와 0의 곱 3. 1의 존재이다. 이걸 생각하며 코드를 짜면 아래처럼 나온다. from sys import stdin input = stdin.readline t = int(input()) minus = 0 oneval = 0 gd = [] for _ in range(t): tmp = int(input()) if tmp

우선 보석 리스트와 가방 리스트를 받아 정렬한다. 그 후 힙을 사용하여 문제를 해결해야한다. 가방을 기준으로 for문을 돌리는데 이때 가방은 sort되어 무게가 작은 순으료 값이 나온다. 여기서 생각해야 할 점은 보석도 무게를 기준으로 sort 했기 때문에 보석을 heap에 넣어 놓고 다음 for 문 루프를 돌아도 heap에 있는 보석은 다음 가방 속에도 들어갈 수 있다. 그렇다면 heap에 보석을 넣을 때 maxheap으로 값을 넣고 for문이 돌때마다 가방에 들어갈 수 있는 보석을 업데이트 하며 heap 속에 들어있는 가장 가치있는 보석을 pop 하여 result에 값을 더하면 답이 나오게 된다. 처음에는 단순히 이중 포문으로 문제를 해결하려 했으나, 역시나 안된다. import sys import ..

이번에는 친형과 함께 소개딩 시즌3에 참여했다. 작년과 달리 이번 대회 예선은 기획서를 제출하는 것이 아닌 코드를 주고 시큐어 코딩을 하는 문제를 푸는 방식으로 예선이 진행되었다 (난이도는 그렇게 높지 않았다). 가벼운 마음으로 예선에 신청하여 혼자 문제를 풀어 운 좋게 본선에 진출하게 되었다. 친형은 기획을 맡고 나는 개발을 맡아 대회를 진행했다. 형과의 상의 끝에 JobMBO라는 직무 목표 관리 웹 서비스를 주제로 삼았다. 우선 첫번째로 지난번에 실망했던 티셔츠는 작년보다 훨씬 나아졌다. 하지만 그래도 ㅎㅎ... 이번 해도 마찬가지로 운영진 분들은 참 유쾌하셨다 ㅋㅋ 대회를 실시간 zoom으로 진행헀는데 중간중간 잠이 깨게해주시고 질문도 친절히 잘 받아주시고 아주 bb 이번 대회도 스타벅스, 편의점 ..

처음에는 두가지 방식을 생각을 했다. 1. dict 객체를 만들어 input을 하나씩 넣고 마지막에 sort를 하는 방식 2. input을 다 받고 sort를 하여 list를 순회하며 퍼센트를 출력하는 방식 결국은 첫번째 방식으로 코드를 구현했다. import sys from typing import DefaultDict input = sys.stdin.readline n = 0 trees = DefaultDict(int) while True: a = input().rstrip() if not a: break trees[a] += 1 n += 1 trees2 = list(trees.keys()) trees2.sort() for a in trees2: print('%s %.4f' % (a, trees[a]..

DP 문제는 규칙을 찾을 수 있으면 쉽다. 우선 N=1일때 2일때 ~ 이런식으로 N=4일때까지의 값을 계산해봤다. 결국 i[N]= i[N-2]+i[N-1]*2 라는 규칙을 찾을 수 있었다. N = int(input()) dp = [1, 3] for i in range(2, N+1): dp.append((dp[i-1]*2+dp[i-2]) % 9901) print(dp[-1])

이 문제를 아무 생각없이 덧셈 뺄셈을 할 때마다 배열에 추가하며 풀면 최대 2의 100승 크기의 배열이 나온다. 하지만 이 문제의 조건에는 셈을 진행하며 중간에 0 미만 or 20 초과는 셈에서 제한다는 조건이 있다. 따라서 Nx20 크기의 배열을 만들어 N-1의 숫자를 N으로 옮기는 방식으로 풀면 쉽게 해결할 수 있다. t = int(input()) gd = list(map(int, input().split())) dp = [[0]*21 for _ in range(t)] answer = gd.pop() dp[0][gd[0]] = 1 for i in range(1, t-1): for j in range(21): if dp[i-1][j]: if j-gd[i] >= 0: dp[i][j-gd[i]] += dp..