백준
-
백준 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..
-
백준 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])