일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- memory
- codeup
- 파이썬
- 분할메모리할당
- 스프링
- Spring
- web
- 자료구조
- 코드업
- react-redux
- Java
- 일상
- CPU 스케줄링
- error
- 타입스크립트
- 기초100제
- 알고리즘
- Operating System
- 협업
- OS
- 정렬
- js to ts
- 토이프로젝트
- Redux
- C++
- react
- 공부
- 리덕스장바구니
- 프로그래머스
- 백준
- Today
- Total
목록Algorithm/BOJ (139)
감자튀김 공장🍟
✔ 문제 ✔ 풀이 👻 틀린 코드 (예외 처리 부족) t = int(input()) for _ in range(t): h, w, n = map(int, input().split()) y = n % h x = (n // h) + 1 if x < 10: print(y, 0, x, sep='') else: print(y, x, sep='') ⭕ 정답 코드 t = int(input()) for _ in range(t): h, w, n = map(int, input().split()) y = (n % h) * 100 x = n // h if y == 0: y = h * 100 print(y + x) else: print(y + x + 1) ✔ 설명 y가 0일 경우를 생각해야한다. 예를 들어 h가 5일 경우 n이 1..
✔ 문제 ✔ 풀이 👽 틀린 코드 (시간 초과~!) a, b, v = map(int, input().split()) h = 0 cnt = 0 while True: h += a cnt += 1 if h >= v: print(cnt) break else: h -= b ⭕ 정답 코드 a, b, v = map(int, input().split()) h = (v - b) / (a - b) print(int(h) if h == int(h) else int(h) + 1) ✔ 설명 h = (높이 - 저녁h) / (낮h - 저녁h) 라는 공식을 세우면 while문을 계속 돌 필요가 없다. 총 높이에서 밤에 미끄러지는 높이를 빼고, 하루에 총 올라갈 수 있는 거리로 나누면 되는 것이다. h가 정수로 딱 떨어진다면 걸리는 날..
✔ 문제 ✔ 풀이 n = int(input()) l = 1 while n > l: n -= l l += 1 if l % 2 == 0: a = n b = l - n + 1 else: a = l - n + 1 b = n print(a, '/', b, sep='') ✔ 후기 생각보다 더 어렵다.. 대각선끼리 묶어서 생각해야한다는 점이 키 포인트였던 것 같은데, 그걸 못 찾아서 계속 어떻게 풀어야하나 각 입력 숫자들 사이에서 규칙을 계속 찾고 있었다. [1/1], [1/2, 2/1], [3/1, 2/2, 1/3], [4/1, 3/2, 2/3, 1/4] 이렇게 한 대각선에 각 분수들이 들어가게 된다. while문을 돌면서 n이 몇번째 대각선에 들어가야하는지 알아야한다. 다음 if/else 문을 통해서 대각선의 짝..
✔ 문제 ✔ 풀이 n = int(input()) honeycomb = 1 cnt = 1 while n > honeycomb: honeycomb += 6 * cnt cnt += 1 print(cnt) ✔ 설명 먼저 honeycomb 1에서 시작하게 되는데 1번 벌집에서부터의 거리를 따지면 거리 1: 1번 벌집 거리 2: 2~7번 벌집 거리 3: 8~19번 벌집 거리 4: 20~37번 벌집 거리 5: 38~61번 벌집 으로 나뉘어진다. 이를 수식화 하면 (1 + 6 * n)이 되는데 ((거리2 벌집의 개수는 6개, 거리 3은 12개, 거리 4는 18개로 6의 배수로 증가함을 알 수 있기 때문이다.)) 벌집이 n보다 커지기 전까지 계속 while 문을 돌면서 벌집의 숫자를 점차 키워가며 거리를 +1씩 하면 된..
✔ 문제 ✔ 풀이 🙄 시간 초과 import sys input = sys.stdin.readline a, b, c = map(int, input().split()) x = 0 while True: x += 1 if c - b a: print(x) break 문제를 해석하면 c * x > a + b * x 공식이 나오는데 양변을 x로 묶어서 정리하면 (c-b)x > a 라는 공식이 나온다. 그래서 c - b가 음수이면 손익분기점을 넘기지 못하므로 -1을 출력, 만약 (c-b)x가 a보다 크다면 그때의 x 값을 출력하도록 했다. 계속해서 시간초과 오류가 나서 import sys도 써보고 y = c-b 도 추가해봤지만 계속해서 시간 초과가..
✔ 문제 ✔ 풀이 n = int(input()) cnt = n for i in range(n): s = input() for j in range(0, len(s) - 1): # s[j+1]까지 검사해야하니까 len(s)-1까지 for문을 돌림 if s[j] == s[j+1]: pass # 현재 알파벳이 다음 글자랑 같다면 pass elif s[j] in s[j+1:]: # 현재 알파벳이 남은 s에 더 있다면 그룹 단어가 아니므로 cnt-1 cnt -= 1 break print(cnt) ✔ 후기 막상 이렇게 구현해야지! 하고 시작하면 구현까지 시간도 오래 걸리고 구현도 잘 안된다........... 고민 하는 시간을 더 길게 가져보고 연습도 더 해봐야겠다.. ୧༼ ” ✖ ‸ ✖ ” ༽୨
✔ 문제 ✔ 풀이 😥 틀린 코드 croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] s = input() count = 0 for i in croatia: if s.find(i) != -1: count += 1 s = s.replace(i, '') count += len(s) print(count) find 함수를 써서 croatia 알파벳이 있다면 count 숫자를 +1 한 후 해당 알파벳을 ''으로 대체해서 없애버렸다. 그리고 남는 s의 길이를 구해 count에 더하는 방법으로 구현했다. 이렇게 했더니 예제는 다 맞게 나오는데 내가 모르는 예제에서 틀리는 것 같다. 대충 감이 오는게 만약 'c=nd-jk' 이런 문자열이 온다면 1. c= 제거 후..
✔ 문제 ✔ 풀이 alp = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] s = input() count = 0 for i in alp: for j in i: # 2~9번 다이얼 중 어디에 있는 지 for k in s: # s의 알파벳이 해당 다이얼의 알파벳에 있는 지 확인 if j == k: count += alp.index(i) + 3 # 만약 k가 a라면 3초가 걸리지만 index는 0이기 때문에 index(i) + 3을 한다 print(count) ✔ 후기 3중 for문이라 엥? 스럽지만 제일 직관적이다. s를 각 문자열로 나눠서 list로 만들려고 했는데 그냥 in s 하면 되는거였다. 항상 숫자 입력 받을 때 list(map()) 했..
✔ 문제 ✔ 풀이 a, b = map(int, input().split()) a = (a // 100) + ((a % 100) // 10) * 10 + (a % 10) * 100 b = (b // 100) + ((b % 100) // 10) * 10 + (b % 10) * 100 print(max(a, b)) ✔ 후기 그냥 a ,b를 int가 아니고 str로 입력 받아 a[::-1]로 역순 배치를 할 수도 있었는데 제일 직관적이게 짜봤다. 몫과 나머지를 헷갈리지 않고 구해야하기 때문에 나처럼 정신놓고 육포 먹으면서 짜면 틀릴 수도 있음 ㅎ_ㅎ