[BOJ][Python] 16236 아기 상어
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★★☆☆☆문제 레벨: Gold 3문제 유형: 시뮬레이션, bfs풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제] [코드]문제 풀이 과정- 구현 조건 정리 - 코드 실행 위치 확인 (코드 위치에 따라 실행이 달라짐) [구현하면서 발생한 문제점과 주의할 점]* deque로 bfs를 구현함을 잊지 말기 from collections import dequeQ = deque()  1. BFS 방법은 생각했으나, 최단 거리 측정 문제처럼 dist 설정하는 방법을 몰랐음-> dist[nx][ny] = dist[x][y] + 1 (이전 거리 값 + 1)  2. dist, fish, Q 값 초기화 위치 문제 -> bfs 밖에서 초기화 해주는 바람에..
[BOJ][Python] 2630 색종이 만들기 / 분할정복, 재귀
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★★★☆☆문제 레벨: 실버 2문제 유형: 분할정복, 재귀풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제]예시: 8x8 종이의 경우1단계: 8x8 전체 확인↓ 다른 색 발견2단계: 4x4로 4등분↓ 각 부분 확인3단계: 필요한 부분만 2x2로 분할↓ 각 부분 확인4단계: 필요한 부분만 1x1로 분할[코드]분할 정복(Divide and Conquer) 1. 분할(Divide)원래 문제를 더 작은 하위 문제들로 나눈다. 각 하위 문제는 원래 문제와 같은 성격을 가진다. 보통 원 문제의 크기를 절반으로 나누는 경우가 많다. 2. 정복(Conquer)나눈 하위 문제들을 재귀적으로 해결한다. 하위 문제가 충분히 작아지면 직접 해결한다. 작은 ..
[BOJ][Python] 17626 Four Squares
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★★☆☆☆문제 레벨: 실버 3문제 유형: 브루트포스, DP풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제] [코드]이 문제를 보고 정리에 대해 많이 아는 사람이 문제를 잘 풀겠구나 싶었다. 라그랑주의 네 제곱수 정리(Lagrange's four-square theorem)모든 자연수를 4개의 제곱수 합으로 표현할 수 있다. 임의의 수를 4의 배수와 나머지(0, 1, 2, 3 중 하나)로 나눈다. 4의 배수는 각 자리수도 4의 배수로 표현된다. 홀수는 항상 4개의 홀수 제곱수의 합으로 표현 가능하다. 짝수는 4개의 짝수 제곱수의 합으로 표현 가능하다.  처음에는 가장 적은 수의 제곱수로 나타내려고 하니 큰 제곱수부터 더해가는 식으로 ..
[BOJ][Python] 18110 solved.ac / round() 반올림 안 되는 문제
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★☆☆☆☆문제 레벨: 실버 4문제 유형: 수학, 구현풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제] [코드]round 함수로 반올림을 구현했으나, 반올림이 되지 않는 반례 문제가 발생한다. (당황)# 일반적으로 기대하는 반올림1.5 → 22.5 → 33.5 → 4# 실제 round() 동작 (짝수 반올림)1.5 → 2 (2가 짝수라서 올림)2.5 → 2 (2가 짝수라서 내림)3.5 → 4 (4가 짝수라서 올림) round 함수가 위와 같이 동작되는데, "Bankers' Rounding" 방식이라서 그렇단다...  도입 이유전통적 반올림은 항상 올림하므로 큰 데이터셋에서 상향 편향 발생은행/금융 계산에서 편향 최소화 필요짝수 반올림..
[BOJ][Python] 7568 덩치
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★★☆☆☆문제 레벨: 실버 5문제 유형: 구현, 브루트포스풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제] [코드]처음에는 몸무게, 키 내림차순으로 정렬하고, 앞의 (몸무게, 키) 쌍과 비교해주었다. (실패 코드)더보기import sysinput = sys.stdin.readlineN = int(input())lst = [tuple(map(int, input().strip().split())) for _ in range(N)]# print(lst)sorted_lst = sorted(lst, key=lambda x: (x[0], x[1]), reverse=True)# print(sorted_lst)tmp, cnt = {}, 0mx_w..
[BOJ][Python] 26265 멘토와 멘티
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★★☆☆☆문제 레벨: 실버 5문제 유형: 정렬풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제] [코드]groups = {}for x in lst: if x[0] not in groups: groups[x[0]] = [] groups[x[0]].append(x[1]) 딕셔너리를 사용해서 첫 번째 단어(x[0])가 같은 것들끼리 그룹화예: groups = {'cgiosy': ['cologne', 'jhnah', 'sean', 'leejseo', 'junseo']}result = []for key in sorted(groups.keys()): # x[0] 오름차순 sorted_second = sorted(g..
[BOJ][Python] 2108 통계학
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★☆☆☆☆문제 레벨: 실버 3문제 유형: 정렬, 구현, 수학풀이 상태: 답안참고 / 스스로 해결 -> Counter 자료구조 사용추후: 다시 풀어보기 / 간단 복습 / 완벽 이해  [문제] [코드]최빈값을 구하는 것 이외(산술평균, 중앙값, 범위)에는 간단하게 구현할 수 있다. 최빈값은 Counter함수를 사용했다.  최빈값 구하는 방법 두 가지1. stsatistics 라이브러리 사용 - 최빈값이 여러 개일 경우 첫 번째 값만 반환한다. import statisticsdata = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5]print(statistics.mode(data)) # 4data = [6, 6, 6, 6, 6, 6, 1, 2, 2, 3, 3, ..
[BOJ][Python] 1018 체스판 다시 칠하기
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★☆☆☆☆문제 레벨: 실버 4문제 유형: 브루트포스풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제] [코드]내가 푼 방법은,체스판 색의 종류는 두 개로 정해져 있으니 두 개를 배열로 고정해주었다. 그리고 그 배열과 비교하며 다른 칸의 개수를 세고 두 종류 중 다른 칸의 개수가 적은 걸 반환해주었다. import sysinput = sys.stdin.readlineN, M = map(int, input().split())board = []for i in range(N): st = input() board.append(st) def in_range(x, y): return 0  시간 복잡도는 N x M 으로, O(NM)이다. 다..
[BOJ][Python] 20153 영웅이는 2의 거듭 제곱을 좋아해!
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★★☆☆☆문제 레벨: 실버 2문제 유형: 비트마스킹, 브루트포스풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제]  [문제 설명] - 예제 입력 1첫째 줄에 자연수 N: 3둘째 줄에 N개의 자연수: 5 7 11 N개의 자연수를 2진수로 변경하면,5 = 101, 7 = 111, 11 = 1101 이 된다. 각 자리별 개수는 다음과 같다. \(2^0\)\(2^1\)\(2^2\)\(2^3\)3221 여기서 홀수인 수만 더한다. \(2^0\) + \(2^3\) = 9 가 된다.  5 숫자를 제거하고 계산할 경우, \(2^0\)\(2^1\)\(2^2\)\(2^3\)2211 \(2^2\) + \(2^3\) = 12 가 된다. 7 숫자를 제거하고..
[BOJ][Python] 32344 유물 발굴
·
🚩 Coding Test/Baekjoon
Overview체감 난이도: ★☆☆☆☆문제 레벨: 실버 5문제 유형: 구현, 기하학풀이 상태: 답안참고 / 스스로 해결추후: 다시 풀어보기 / 간단 복습 / 완벽 이해 [문제] [코드]간단 구현 문제 다른 사람들은 입력값을 받으면서 좌표의 최소, 최대를 갱신해주는 방법으로 구현했는데, (시간 복잡도: O(N))나는 입력을 다 받고 정렬해서 정렬 시간이 더 들어간다. (시간 복잡도 O(NlogN))처음에는 시간 초과가 발생했는데, sys.stdin.readline 추가하고 통과 됐다. import sysinput = sys.stdin.readlineR, C = map(int, input().split())N = int(input())arr = {}for _ in range(N): a, v, h = m..