문제https://www.acmicpc.net/problem/2167 풀이무식하게 그냥 더하거나 (PyPy3만 통과 가능), 누적합 배열을 사용하거나 둘 다 가능하다 누적합을 이용하는법의 풀이는 다음과 같다.먼저 보라색 영역의 합을 구한다고 가정하자정답은 6+7+10+11 = 34이다 색칠된 모든 영역을 더한 다음 (1+2+3 + 5+6+7 + 9+10+11 = 54)초록색 영역 (1+2+3 = 6)을 빼고파란색 영역인 (1+5+9 = 15)를 빼고겹쳐서 두번 빼버린 1을 다시 더하자결과는 54 - 6 - 15 + 1 = 34로 보라색 영역만 더한 값이 나온다. 미리 "(0,0)부터 각각의 좌표까지의 영역"을 더해서 저장해놓은 누적합 이차원 배열을 만들고보라색-초록색-파란색+빨간색 위치의 숫자만 계..
문제https://www.acmicpc.net/problem/11047 풀이전형적인 그리디 문제이다목표 금액보다는 작은 동전중 가장 큰 숫자를 계속해서 취해 나가면 된다. 동전의 가치는 오름차순으로, 이전 숫자의 배수로 주어지기때문에 3 900 300 800이런 테스트 케이스와 같이 800을 먼저 취했더니 300을 취할 수 없는 상황같은건 고려하지 않아도 된다. 정답 코드N, K = map(int, input().split())coins = [int(input()) for _ in range(N)]coins.sort(reverse=True)answer = 0for coin in coins: while coin
문제https://www.acmicpc.net/problem/9017 풀이낚시 없는 정직한 구현문제다.6명 이상 출전하지 않은 팀은 아예 없는셈 쳐야 하는것에 주의 하면 된다. 6명이 출전하지 않은 팀을 set으로 저장해두고팀명을 key, 팀원의 순위를 List로 담을 defaultdict(list)를 선언하고 6명 이상인 팀의 순위를 6명 이하로 출전한 팀을 제외하는것을 고려하며 담아준다. 딕셔너리를 순회하며 리스트의 0~3번 인덱스의 값의 합, 4번 인덱스의 값, 팀명을 담은 리스트를 만들고 .sort()로 오름차순 정렬한뒤, 정렬된 첫번째 원소의 팀명(2번 인덱스)을 출력하면 끝. 정답 코드from collections import defaultdictT = int(input())for _ i..
문제https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 풀이단순 무식하게 전체를 검사하면 된다.하나의 행에 회문이 몇개인지, 하나의 열에 회문의 몇개인지 3중 for문을 사용해 가로 한번 세로 한번 카운트해서 풀었다. 리팩터링은 다음과 같이 진행했다.list(zip(*wordBoard))를 사용해 전치한 행렬을 생성하여 사용하기문자가 회문인지 검사할때는 절반만 검사하기isPalindrome 플래그 대신 all()을 사용하여 모두 만족하는지 검사하기 ..
문제https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV19AcoKI9sCFAZN SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 풀이0으로 채워진 문자열과 앞에서부터 한 문자씩 같은지 검사하되 다르다면 뒷부분을 1로 채워버리고 검사를 이어나가는 방식으로 생각하면 된다. (실제로 0으로 채워진 리스트를 만들어서 비교할 필요는 없고 숫자 하나에 기록한다.) "0100111"이라고 가정하고 0과 비교를 시작하는 예제0 -> 0과 비교시 같음1 -> 0과 비교시 다름, 다음 숫자부터 1과 비교, 정답 1 증가0 -> 1과 비교시..
문제https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AZD8K_UayDoDFAVs SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 풀이더해지는 숫자가 클수록 이득이다. 임계값 N을 초과할때까지 A, B중 작은수에 큰 수를 더하면서 더하는 횟수를 세면 된다. 정답 코드T = input()testCases = [list(map(int, input().split())) for _ in range(int(T))]for testCase in testCases: answer = 0 while testCase[2] >= m..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.