반응형

전체 글 125

[python] 17636. Four Squares

문제: https://www.acmicpc.net/problem/17626  풀이 이번 문제는 제곱수의 합을 구하는 문제입니다.dp로 해결했는데, 점화식을 찾는 것이 쉽지 않았습니다.   이해를 위해 그림을 첨부했습니다. i를 가지고 j를 만든다고 할 때, 그림처럼 항의 개수를 가지게 됩니다. 이는 제곱수일 때 +1만큼 커지게 됩니다. (그림을 보고 이해하시면 되겠습니다 !) 브루트포스로도 문제를 해결할 수 있습니다.주석과 함께 코드를 첨부해두겠습니다.   - DP 문제 풀이N = int(input())dp = [n for n in range(N+1)]for i in range(2, int(N**0.5)+1): for j in range(i*i, N+1): dp[j] = min(dp[j..

Git / Github 사용법

오늘은 git과 github에 대해 공부해보려고 합니다. Git과 Github의 차이점  - github: 소스코드를 올리는 어떤 공간 - git: 소스코드를 내 컴퓨터에서 인터넷으로 올려주는 역할  github는 개발 협업 tool로, 효율적인 코드 형상 관리를 하기 위함이라고 생각하면 됩니다  git 영역1) Working Directory (local): 개인 코드 작성 2) Staging 영역: git add를 통해 수정된 코드를 올리는 영역 3) Repository: git commit을 통해 최종 수정본을 제출 Git 작업 플로우 1) 저장소(Repository) 생성 원하는 폴더 들어간 후$ git init 또는 기존 github에 있는 저장소를 내 로컬로 복제할 수도 있다.$ git clo..

git ・github 2024.06.03

[python] 2839. 설탕 배달

문제: https://www.acmicpc.net/problem/2839 풀이 요즘 코딩테스트 준비로 인해, 여러 문제를 풀고 있는데요. 예전에 풀어봤던 DP 문제를 다시 풀어보게 되었습니다.그 때와는 또 다른 방식의 풀이를 생각해서기록해보려고 작성하게 되었습니다. 1년 전 쯤에 풀었던 코드는 부끄러울 정도로 지저분합니다 ...  그때 작성한 코드를 보니, 지금은 조금 성장한 모습이라 다행이라고 생각이 됩니다.  제가 푼 방법을 방법을 말씀드려보자면 !N을 5로 나눈 몫을, 큰 순서대로 구하고 (for문을 돌려서)사용한 봉지의 개수가 가장 작은 것부터 나오도록 계산했습니다.  5kg의 봉지를 많이 사용할수록 3kg의 봉지는 덜 사용하기 때문에5kg의 몫을 구할 수 있을 때 break를 걸었고,break ..

[python] 10870. 피보나치 수 5

문제: https://www.acmicpc.net/problem/10870  풀이  이번 문제는 피보나치를 구하는 문제입니다. 피보나치는 f(n) = f(n-1) + f(n-2)의 점화식으로 구할 수 있는 쉬운 문제입니다. 문제는 크게 두 가지의 방법으로 해결할 수 있습니다.1. 재귀 2. for loop 저는 재귀 중 memoization 방법으로 ! 한 번 계산한 fibo(n)는 arr에 저장하고, 다시 계산하지 않는 방법으로 풀었습니다.  세 가지 방법은 아래의 코드처럼 풀이할 수 있습니다.   - 기본 코드 (재귀)def fibo(n): if n    - 기본 코드 (for loop)n = int(input())fibonacci = [0, 1]for i in range(2, n+1): ..

[python] 5618. 공약수

문제: https://www.acmicpc.net/problem/5618 풀이이번 문제는 공약수를 구하는 문제입니다. 난이도는 브론즈라 어렵지 않았는데, 포스팅까지 하는 이유는 '시간 초과' 때문입니다. 저도 쉽게 코드를 작성했는데 바로 시간 초과가 나더라구요 ㅠ. ㅠ  문제점이 무엇인지 파악해보도록 합시다 !  공약수는 숫자 n개가 공통적으로 나눠지는 수를 의미하기 때문에저는 직관적으로 1부터 작은 수 까지의 범위를 돌고 나눠지는 수를 구하는 방식으로 풀었습니다.  해당 문제는 숫자 두 개 혹은 세 개의 공약수를 찾는 문제였기 때문입니다. 문제의 제한 시간은 1초 였는데요.작은 수가 최대 10의 8제곱(1억) 까지 갈 수 있기 때문에 1초에 2000만번의 연산을 하는 파이썬으로는 시간 초과가 나는 것입..

[python] for-else문 사용법・ 이중 for문 완전히 탈출

코딩테스트를 준비하면서 이중 for문을 완전히 탈출하는 코드를 작성한 적이 있습니다. 이중 for문 탈출은 일반적으로 flag를 사용해서 break로 탈출하는데요. 그 밖에 for else문으로 탈출할 수 있음도 알게 되어 공유드리려고 글을 작성하게 되었습니다.  for-else문이 작동하는 과정for-else문은 for문이 break 등으로 중간에 빠져나오지 않고 끝까지 실행됐을 경우, else문이 실행됩니다. for i in range(2): print(i, end=' ')else: print('for문이 끝까지 실행됐습니다!') 위의 코드를 실행하면 하단처럼 결과가 나오는데요.이는 for문이 중간에 빠져나오지 않고 끝까지 실행됐기 때문입니다.그렇다면 이렇게 코드를 작성한다면, 결과는 어떻게 나올까요..

카테고리 없음 2024.05.30

[python] 1913. 달팽이

문제: https://www.acmicpc.net/problem/1913  해당 문제를 풀이할 때 아래 링크의 유투브 강의를 참고했습니다.큰 도움이 되므로 시청을 왕 - 추천합니다 !  https://www.youtube.com/watch?v=rw2gQg9x_EA  문제 풀이 방법은 두 가지 방식이 있습니다.1. 1부터 채우기2. 49(n*n)부터 채우기 저는 2번 방법으로 문제를 해결했습니다.  풀이풀이 방법을 안다면 코드 구현은 그렇게 어렵지 않습니다.     하지만 자꾸만 시작 지점(arr[0][0])에서 오류가 났는데요. 이는 while문 안의 ni  = i + di[dr], nj = j + dj[dr]에서arr[0][0]을 채우기도 전에 좌표를 dr만큼 이동시키기 때문입니다.  따라서 저는 ar..

[python] 1244. 스위치 켜고 끄기

문제: https://www.acmicpc.net/problem/1244 풀이 이번 문제는 남자인 경우는 쉽게 풀렸지만,여자인 경우에서 자꾸 에러가 났습니다.  이는 남자일 때는 해당 숫자의 배수를 뒤집으면 되는 문제이지만 (for문의 step을 num만큼)여자일 때는 대칭인 경우와 비대칭인 경우를 고려해주어야 하기 때문입니다. 일단 문제는 인덱스가 1부터 시작하는데, 배열은 인덱스가 0부터 시작하기 때문에 가장 앞에 [-1]을 추가해서 인덱스를 맞춰주었습니다. 핵심은 여자인 경우의 대칭과 비대칭일 때의 코드를 작성하는 것입니다. 나는 처음에 cnt를 +1해주는 방식으로i = i+2*cnt일 때와 i != i+2*cnt (일치/불일치)로 코드를 짰습니다. 그러나 index error 발생으로 코드를 리팩..

[python] 2960. 에라토스테네스의 체

문제: https://www.acmicpc.net/problem/2960 풀이  이번 문제는 어렵지 않았지만 코드가 조금 지저분하게 작성됐습니다. 시간 제한은 1초로, 이중 for문으로 충분한 시간이라 이중 for문으로 구현했습니다. 그러나, cnt를 셀 때마다 k랑 맞는지 확인하고 break를 걸어주어야 하는 부분 때문에 코드가 지저분해졌고 'if ~' 부분을 반복해서 작성했습니다.  따라서 방향성을 바꿔서 깔끔한 코드로 수정했습니다. 또한 이중for문을 완전히 탈출할 때 if문을 두 번 쓰지 않고, 하단의 코드처럼 else: continue break로 작성해도 됨을 배웠습니다.  - 지저분한 코드n, k = map(int, input().split())num_list = [i for i in ran..

[python] 17478. 재귀함수가 뭔가요 ?

문제:  https://www.acmicpc.net/problem/17478 나는 재귀함수 구현을 헷갈려하는 편인데, 이 문제를 통해 제대로 알길 원한다. 재귀보다 후에 작성한 코드는 재귀가 종료된 후 실행함을 고려하면서 코드를 작성했다.  .join(문자열)은 문자열 사이에 특정 문자를 삽입할 수 있는 함수이다. 이때, 문자열 맨 앞에도 특정 문자를 삽입해야 하기 때문에 문자열에 ""를 추가했다.  def recursive(cnt, n): if cnt == n: string = "____" * cnt text1= [ "", "\"재귀함수가 뭔가요?\"\n", "\"재귀함수는 자기 자신을 호출하는 함수라네\"\n",..

728x90
반응형