몸소 겪었던 Python과 PyPy의 차이(메모리,속도)
무엇을 경험했나? 백준 2263 트리 문제를 풀면서 경험했던 것을 공유하려 합니다. RecursionError sys.setrecursion(10**5) //pypy3에서는 정답, python3에서는 recursionError sys.setrecursion(10**6) //pypy3에서는 메모리초과, python3에서는 정답 (21.03.05 추가) 분명 동일한 recursion 깊이인데 왜 pypy3는 정답이고 python3는 recursionError(깊이 초과)가 발생할까요? pypy doc을 살펴보면 이렇게 설명되어 있습니다. 링크 pypy3에서는 정확한 크기를 할당하는 것이 아니라 대략적으로 크기를 할당하기 때문에 위와 같은 문제가 발생하게 됩니다. 메모리 초과(MLE) : write와 prin..
byTech··
백준 1018 체스판 다시 칠하기 풀이 python, java
문제로이동 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 목차 문제 설명 8*8 크기의 체스판을 완전탐색합니다. 즉, 크기가 8*8보다 더 큰 경우 위치를 옮겨가며 확인해야 합니다. 왼쪽부터 오른쪽으로 스캔하듯 모두 훑어줍니다. 가로 탐색이 끝났다면 이제 세로축을 한 칸 증가시켜야겠죠? 한 칸 내린후 위와 동일하게 오른쪽으로 쭉 가야합니다. 어떤 로직인지 이해 하셨나요? 그럼 최종적으로 아래 그림처럼 탐색을 마칩니다. 자. 이제 위와같은 체스판이 아닌 흑백이 섞인(또는 뒤죽박죽) 체스판 모양이 입력됩..
byOnlineJudge··
백준 10096 세 친구 풀이 python, java
문제로이동 10096번: 세 친구 준규, 해빈, 진욱이는 다음과 같은 게임을 한다. 먼저, 준규가 문자열 S를 고른다. 그 다음, 해빈이는 S의 뒤에 S를 붙인 새로운 문자열 T를 만든다. 마지막으로 진욱이는 문자열 T의 어딘가(시작이 www.acmicpc.net 목차 테스트케이스 백준에서는 첫 번째 테스트케이스만 제공됩니다. NOT IMPOSSIBLE과 NOT UNIQUE 조건이 명시는 되어있는데 뭔가 이상해서 찾아보니 입력이 안된건지 더 있길래 가져왔습니다. 참고하시면 됩니다. 문제 설명 자세한 풀이 방법은 소스코드 Python의 주석처리를 참고하시기 바랍니다. 처음엔 모든 알파벳이 같은 경우를 생각하지 않고 아니 이게 맞는데 왜 틀려?? 라고 생각했다가 3번의 WA를 받고 깨우쳤습니다.. Pytho..
byOnlineJudge··
백준 1002 터렛 풀이 python, java
문제로이동 목차 문제 설명 알고리즘 문제라기 보다는 수학에 많이 가깝습니다. 두 원을 그려서 교점(겹치는 점)을 찾아내는 문제이며, 정답률이 많이 낮은 것으로 봐서는 여러 경우의 수를 고려하지 못했던 것 같습니다. 물론 저도 정답률 낮추는 데 한 몫 했습니다 ^^ 소스코드도 위와 같은 순서로 분리되어 있습니다. 1. 원이 완전히 겹치는 경우 (출력값 0) 두 원의 거리가 0이면서 반지름도 같은 경우를 말합니다. 2. 원이 한쪽 면만 닿는 경우 (출력값 1) (내접) 두 원의 거리 == 원1 반지름 + 원2 반지름 단, 원1 반지름과 원2 반지름의 길이를 비교해서 작은 값, 큰 값으로 분류해도 되지만 편의상 절대값 abs를 이용했습니다. (외접) 두 원의 거리 - r1 = r2 아래 그림을 참고 바랍니다...
byOnlineJudge··
백준 2217 로프 풀이 python, java
문제로이동 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 목차 문제 설명 그리디 문제는 규칙을 파악하는게 중요합니다. 로프 여러개를 사용해 병렬로 무게를 들 수 있습니다. 이 때, W/K(갯수) 만큼의 무게가 걸리게 됩니다. 즉, {나를 포함한 나보다 무게가 큰 로프 수 * 내 로프 = 최종 무게}가 성립됩니다. 1 5 3 2 4 이렇게 입력되었다고 가정하면 이 Array를 정렬해 줍니다. 5 4 3 2 1 내림차순이 편하긴한데, 오름차순도 index 접근값만 바꿔주면 되기 때문에 크게 상관없습니다..
byOnlineJudge··
백준 10808 알파벳개수 풀이 python, java
문제로이동 목차 아직 Java가 많이 서툴고, 변수나 리스트 배열 등 기초적인 스킬이 부족해 난이도 가리지 않고 풀고 있습니다. 언제든 피드백 환영입니다. 더 나은 스킬이 있다면 배우겠습니다. 소스 코드 Python - input으로 문자열을 입력받습니다. - 알파벳 a ~ z까지 총 26개이므로 lst배열에 [0]을 총 26개로 초기화 했습니다. - ord(문자)는 문자를 숫자로 바꿔주는 함수이므로 알파벳 a의 아스키코드인 97을 빼주어 lst 배열의 index와 맞춰주었습니다. s = input() lst = [0]*26 for i in s: lst[ord(i)-97]+=1 for i in lst: print(i,end= ' ') Java8 - python에서는 3번째 코드라인 String에 Char..
byOnlineJudge··
불러오는 중...