일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- g++ 업데이트
- regex_search
- 정규식 컴파일
- semanage
- c3 축 없애기
- snmp test
- selinux port 등록
- linux시간으로 변경
- subporcess path
- c3 초
- python popen
- snmp
- InfluxDB
- 1697
- 정규식 문자열 출력
- c3 step graph
- 백준
- c3 축 가리기
- telegraf
- grafana dashboard
- influxdb 설치
- c3 second
- python os
- centos pyhon 설치
- 정규식 활용
- CentOS7
- gcc regex
- python subprocess
- gcc 업데이트
- c++ 정규식
- Today
- Total
목록알고리즘 (45)
리셋 되지 말자
코드 def solution(a, b, v): answer = (v-b) // (a-b) if (v-a) % (a-b) == 0: return answer else: return answer+1 a, b, v = map(int, input().split()) print(solution(a, b, v)) 설명 하루에 올라갔다가 내려오는 높이(b-a)로 v를 나누는 방식으로 반복문을 돌리면 시간초과가 난다(2, 1, 10억이 입력이면 loop를 도는데 10억번 돈다.) 총 거리인 v 에서 낮에 올라갈 수 있는 거리인 a를 뺀다. 이 v-b 길이를 하루방 동안 올라갔다 내려오는 거리인 b-a 로 나눈다. 이때 나누어 떨어지면 나눈 값을 출력한다. 나누어 떨어지지 않으면 하루 더 올라가야 하므로 1을 더한 값을..
코드 def solution(n): cnt_5 = n//5 while cnt_5 != 0: if (n - cnt_5*5)%3 == 0: break cnt_5 -= 1 if cnt_5 != 0: return cnt_5 + (n - cnt_5*5)//3 else: if n % 3 == 0: return n // 3 else: return -1 n = int(input()) print(solution(n)) 설명 최대한 제일 적은 개수의 봉지로 배달을 해야한다 그러므로 5킬로그램 봉지를 최대한 많이 사용하되, 나누어 떨어지게 3킬로 그램 봉지를 사용해야 한다 5킬로그램 봉지를 최대로 잡고, 하나씩 줄이면서 3으로 나누어 떨어지는지 확인한다 나누어 떨어진다면 5킬로그램 봉지 개수와 3킬로그램 봉지 개수를 더한값..
코드 def solution(l, arr): answer = 0 for i in range(l): arr[i] = ord(arr[i])-96 answer = answer + arr[i] * 31**i print(answer%1234567891) l = int(input()) arr = list(input()) solution(l, arr) 설명 문제가 복잡하지만 간단하게 해석하면 다음과 같다. 문자열 입력은 a부터 z 까지 소문자만 나온다. a의 아스키코드 값은 97 이므로 간단하게 ord()를 해준 뒤, 96을 빼준다. 그리고 ord()-1 값과 31의 i 제곱 수를 answer에 계속 더해준다. 마지막에 1234567891로 나눈 값을 출력한다. 파이썬이나 자바였으면 정수 값의 범위에 신경을 써줬어야..
코드 def solution(k, n): arr = [i for i in range(1, n+1)] for _ in range(k): for idx, num in enumerate(arr): if idx == 0: continue arr[idx] = arr[idx-1] + arr[idx] print(arr[n-1]) loop = int(input()) for _ in range(loop): k = int(input()) n = int(input()) solution(k, n) 설명 0층은 기본 default 이기 때문에 n의 크기만큼 초기화 하고 첫 칸부터 1, 2, 3, ... n 으로 초기화 한다. 1층부터 계산을 시작하는데 1번 방은 무조건 1명이다. 그래서 2번 방부터 계산을 시작한다. 계산할 때..
코드 n = int(input()) if n == 1: print(1) exit() cnt = 2 sum_num = 12 total_sum = 7 while n > total_sum: cnt += 1 total_sum = total_sum + sum_num sum_num += 6 print(cnt) 설명 그림의 규칙을 파악하면 수열이 된다. 1, 7, 19, 37, 61 을 기준으로 잡으면 1~7 : 6, 7~19 : 12, 19~37 : 18, 37~61 : 24 6, 12, 18, 24 순서로 차이가 생기게 된다. 6씩 증가하는 sum_num을 이용해 while 문을 돌 때마다 total_sum에 더해준다. 그리고 cnt도 1씩 증가한다. 그러다가 입력한 n이 total_sum보다 커지면 최소거리인 ..
코드 m, n = map(int, input().split()) arr = [0 for _ in range(n+1)] arr[0] = 1 arr[1] = 1 for i in range(2, n+1): mul_num = 2 while i*mul_num = m: print(idx) 설명 제곱근 까지만 검사하는 코드를 넣었는데 시간초과가 떠서 에라토스테네스의 체로 해결 0이 n개만큼 있는 배열을 선언한 뒤, 2~n의 배수에 해당하는 idx의 수만 1로 수정 m보다 큰 idx를 가지고 있고, 해당 idx 위치의 수가 0이면 출력
코드1 - 배열 노가다 def func(): h, w, n = map(int, input().split()) arr = [ [num+1+((floor+1)*100) for num in range(w)] for floor in range(h) ] cnt = 1 flag = False for room in range(len(arr[0])): for floor in range(len(arr)): if cnt == n: print(arr[floor][room]) flag = True break cnt += 1 if flag: break n = int(input()) for _ in range(n): func() 결과 설명 101호 부터 시작하도록 배열을 선언해준다. 101호, 201호, 301호 ... 순서로 ..
코드1 from collections import Counter n = int(input()) cnt = 0 num = 1 while cnt != n: ls = list(str(num)) cd = Counter(ls) if cd.get('6') and cd['6'] >= 3: idx_save = [] for idx, c in enumerate(ls): if c == '6': idx_save.append(idx) start = idx_save[0] cnt_6 = 0 for i in range(1, len(idx_save)): if start+1 == idx_save[i]: cnt_6 += 1 start = idx_save[i] if cnt_6 == 2: cnt+=1 else: start = idx_save..