백준
-
백준 2606번 바이러스 어떻게 풀었나.백준 2023. 1. 21. 00:01
푼 방법 bfs와 dfs를 생각하지 않고 그냥 문제을 읽고 생각나는데로 풀었더니 풀렸다. 기분 째진다 그래도 bfs와 dfs를 공부했다. bfs는 너비우선탐색, dfs는 깊이우선탐색이다. 어떻게 동작하는지는 대충 구글링 해보면 나온다. bfs는 큐를 이용해서 구현했고, dfs는 재귀함수를 이용해서 구현했다. 이 문제에서는 bfs와 dfs 둘중 아무거나 써도 상관이 없지만, 다른 문제를 풀때는 웬지 상관이 있을거 같다. bfs와 dfs를 구현하기 전에 입력을 받아야 하는데, 그 입력은 이차원 리스트 graph를 만들어서 인덱스마다 연결된 노드들을 저장해 주었다. 코드 내가 직관적으로 푼 코드 import sys N = int(input()) K = int(input()) A = [list(map(int, ..
-
백준 7568번 덩치 어떻게 풀었나. 잘못 푼 과정 참고백준 2023. 1. 16. 00:01
잘못 푼 방법 입력을 A리스트에 모두 받는다. 몸무게를 첫번째, 키를 두번째 기준으로 정렬해 새로운 배열 sortA에 저장해 준다. 그후 알맞게 반복문을 돌려 sortA[i]와 sortA[i-1]을 비교하여 순위를 정해 준다. 그리고 중복되는 값이 있다면, 중복되는 값의 순위도 똑같이 복사 해 준다. (마지막 if문) from sys import stdin N = int(stdin.readline()) A = [list(map(int, stdin.readline().split())) for _ in range(N)] ranking = [-1]*N sortA = sorted(A, key=lambda x : (-x[0], -x[1])) count = 1 t = 0 for i in range(N): if i ..
-
백준 2447번 별찍기-10 어떻게 풀었나. 재귀함수 사용. 파이썬백준 2023. 1. 15. 00:01
푼 방법 우선 재귀함수(f(n))를 사용해서 문제를 풀기로 한다. 재귀함수 f(n) 에서는 총 n*n 을 출력한다. 그 출력을 9등분 하여 가운데 부분은 n//3 * n//3 크기의 " " (빈 문자열)을 출력한다. 그다음, 가운데 부분의 주변 8부분은 f(n//3)을 출력한다. 만약에 n == 3이라면 """***\n* *\n***"""을 출력한다. 처음에는 재귀함수 안에서 바로 별을 프린트를 해 주려 했으나, 그렇게 하면 f(3)을 여러번 출력할때 옆으로 계속해서 출력 할 수 없었다. 그러므로 이차원 배열(ans)에 저장하여 .join()함수로 출력해 준다. ********* * * ** * ********* *** *** * * * * *** *** ********* * ** ** * *******..
-
백준 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..