전체 글
-
백준 1193번 어떻게 풀었나백준 2023. 1. 14. 00:01
이 문제는 이 문제를 이상한 방향으로 생각하다가, 제출도 하지 못하고 구글링 했다. 그 대신 완벽하게 이해하고 어떻게 풀어야 하는지 글을 쓴다. 어떻게 푸나 문제 해석하기 이 문제를 풀려면 일단, 대각선 방향으로 주어진 표를 봐야 된다. 그러면 i번째 대각선에는 i개의 분수가 있는게 보인다. 그러므로 i번째 대각선에는 i + (i-1) + (i-2) + ... + 1 이 제일 큰 X값이다. 이것을 이용하여 X가 몇번째 대각선에 있는지 구한다. 그리고 X가 홀수, 짝수 대각선 중 어디에 있는지에 따라서 X위치의 분수를 구하면 된다. 코드 X = int(input()) #X가 몇번째 대각선에 있는지 구한다. t = 1 i = 1 while X > t: i += 1 t += i if i % 2 == 1: #홀..
-
백준 2292번 어떻게 풀었나백준 2023. 1. 13. 00:01
이 문제는 이 문제를 이상한 방향으로 생각하다, 시간이 너무 많이 걸릴거 같아서 답을보고 정리하기로 했다. 어떻게 푸나 문제 해석하기 우선 문제를 풀려면 다음과 같은 표를 생각해야 했다. 답 1칸 2칸 3칸 4칸 ... 범위 1~1 2~7 8~19 20~37 ... 갯수 1개 6개 12개 18개 ... 표 설명 - 답이 1칸인것, 2칸, 3칸인 N의 범위를 새어 보고, 그것의 갯수를 나타낸 표 이다. - 갯수가 두번째 부터는 6, 12, 18로 6의 배수 만큼 늘어난다. 계획하기 위의 표 설명을 바탕으로 계획하면 된다. 위의 표의 범위에 따라서 답을 출력해 줄 것이다. 그렇게 하려면, 범위를 잡아줄 기준이 필요하다. 그 기준은 1, 7, 19, 37, ... 이다. N이 기준보다 작거나 같고, 이전 기준..
-
백준 1158번 어떻게 풀었나.백준 2023. 1. 12. 00:01
푼 방법 i에 K를 계속 더해주는데, len(A)보단 작아야 한다는 조건을 구현하려 했다. 고치면 좋을 부분 처음엔, 변수 i가 len(A)보다 작아질때까지 i - len(A)를 해 줬다. 그런데 다시 생각해 보니까 그건 % len(A)와 똑같은 작업이었다. 이런걸 처음부터 생각해 내고 싶다. 코드 import sys N, K = map(int, sys.stdin.readline().rstrip().split()) A = list(i+1 for i in range(N)) i = 0 answer = [] while A: i = (i+K-1) % len(A) answer.append(A.pop(i)) print("") 참고 https://infinitt.tistory.com/213
-
백준 9012번 어떻게 풀었나. 재정의, 추상화, 계획, 검증하기백준 2023. 1. 11. 00:01
푼 방법 처음에 알고리즘은 그럴듯하게 생각했음. 처음 생각한 알고리즘을 바로 코드로 구현함 그런데 그 알고리즘이 시간복잡도는 전혀 생각하지 않은 것임 그래서 코드 짜는데, 쓰레기를 생산하고있다는 생각이 듬 (계속해서 생각하지 못했던 반복문과 조건문이 추가된다) ____________________________________________________________________________________ 구글링을 해 보고 내가 왜 이런 코드를 생각하지 못했나 생각해봄 일단,, 복붙해서 맞게 함.. 좋았던점 어떻게 해서든 직접 알고리즘을 만들어보려고 했다...ㅠ 고치면 좋을 부분 알고리즘을 생각할때 시간복잡도를 생각할 수 있었으면 좋겠다. 계획이 완벽하게 되지 않았는데 무작정 코드를 작성하기 시작함...
-
백준 10816번 어떻게 풀었나.백준 2023. 1. 10. 00:01
푼 방법 10815번과 비슷한 문제여서 복붙한 다음 수정했다. 10815번 문제와 다른 것은 숫자까지 새야 되는 것이다. 상근이가 뽑은 숫자 카드에 적혀있는 수의 갯수를 딕셔너리에 저장했다. key : value = (카드에 적혀있는 수) : (수의 갯수) 몇개가지고 있는지 인덱스에 따라서 출력해 줬다. 새롭게 안 부분 print()는 호출 자체로 시간이 많이 걸린다. 출처: https://www.acmicpc.net/board/view/106637#comment-168803 코드 import sys N = int(input()) A = list(sys.stdin.readline().split()) A_counting = dict() M = int(input()) cheaklist = list(sys.s..
-
백준 11650번 어떻게 풀었나. lambda 사용백준 2023. 1. 9. 00:01
푼 방법 백준 1181번과 비슷한 문제여서 그대로 품 백준 1181번 풀이 : https://developer-commit.tistory.com/46 코드 import sys N = int(sys.stdin.readline()) A = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(N)] A.sort(key=lambda x : (x[0], x[1])) for i in A: print(i[0], i[1])
-
백준 1181번 어떻게 풀었나. join(), lambda, sort(), set() 설명백준 2023. 1. 8. 00:01
푼 방법 내장함수 sort()와 set()을 사용함 좋았던점 원하는 동작을 하는 함수를 생각하고, 그 함수를 내장함수에서 찾았다. 고치면 좋을 부분 내장함수를 더 알고 있었으면 더 빨리 풀 수 있을거 같다. 새롭게 안 내용 set() 중복 제거 sort() 완벽하게 .sort(key=원하는 함수) 로 정렬 기준을 새울 수 있다. key가 여러개일때 튜플형식으로 key = lambda x: (x[0] , x[2]) lambda식을 세워주면 된다. 그리고 내림차순으로 하고 싶다면 마이너스 부호를 붙여주면 된다. key= lambda x: (-x[0], x[2]) '구분자'.join(리스트) '_'.join(['a', 'b', 'c']) == "a_b_c" # = True lambda 사용법 : lambda ..