본문 바로가기

코딩테스트166

[ 파이썬(python) ] 백준 2775 - 부녀회장이 될테야 📍 백준 2775 - 부녀회장이 될테야 백준 2775 - 부녀회장이 될테야 💡 나의 풀이 이 문제는 DP, 재귀로 풀 수 있지만, DP로 푸는방법이 시간이 훨씬 단축된다. 재귀로 풀때는 python3에서 시간초과에 걸리므로 pypy로 제출해야한다. DP 풀이방법이다. 0층의 i는 i명이 살기때문에 제일 아래는 [1, 2, 3, 4...]다. 문제는 층수가 증가 할때마다 이전 층수의 1호부터 b호까지 더한값을 사용해야하는데 이때 DP가 쓰인다. arr[i] += arr[i-1]로 1호부터 b호까지 값을 누적시킨다. 층수가 올라갈때는 3번 반복문 바깥에 하나 더 선언한다. for _ in range(k) 재귀 풀이방법이다. a: 층, b: 호 하단의 사진처럼 이전 index + 아래 index를 더해준다. .. 2021. 6. 10.
[ 파이썬(python) ] 백준 1712 - 손익분기점 📍 백준 1712 - 손익분기점 백준 1712 - 손익분기점 💡 나의 풀이 손익 분기점에 대한 이해가 있어야 이 문제를 풀 수 있다. 처음에 while문을 사용하여 풀었는데 다시 보니까 A, B, C가 21억 이하의 자연수기때문에 시간초과판정이 났다.(게다가 시간제한도 무려 0.35초 밖에 안된다.) 반복문을 사용하지 않고서 풀 수 있는 방법은 단순 사칙연산일텐데 공식이 잘 떠오르지 않았다. ㅠㅠ 구글링하다 코딩펜님 영상을 봤는데 이해가 잘 됐다. 결론적으로 손익분기점은 고정비용 + 가변비용 * n < 판매비용 * n 과 같이 나타 낼 수 있는데 다음과 같이 식을 정리 할 수 있다. (고정비용은 a, 가변비용은 b, 판매비용은 c로 가정했다.) a + (b * n) = (c * n) a = (c * n).. 2021. 6. 9.
[ 파이썬(python) ] 백준 2480 - 주사위 세개 📍 백준 2480 - 주사위 세개 백준 2480 - 주사위 세개 💡 나의 풀이 이 문제의 핵심은 같은 눈이 몇 개가 나왔는지 분류를 하는 작업이다. 내가 풀었던 방법은 set의 특징 중 중복 제거를 이용했는데 주사위를 더 많이 던질 때 사용하면 괜찮은 방법인 것 같다. 다시 본론으로 돌아가 len(set(arr)) == 1이면 모든 수가 같은 수이기 때문에 1개로 줄어든 것이다. 따라서 같은 눈이 3개라고 할 수 있다. 반대로 len(set(arr)) == 3이면 모두 다르기 때문에 중복제거가 일어나지 않았다. 이제 나머지 조건인 같은 눈이 2개만 나오는 경우를 찾으면 되는데 set으로 찾을 방법이 떠오르지 않아 반복문 + count + index를 이용했고 count가 2개 이상인 index를 찾아 a.. 2021. 6. 8.
[ 파이썬(python) ] 백준 2010 - 플러그 📍 백준 2010 - 플러그 백준 2010 - 플러그 💡 나의 풀이 처음 문제 풀 때 각각 멀티탭을 꽂을 수 있는 개수만큼 max값만 갱신하면 되는 거 아냐?라고 생각했는데 그게 아니었다. 멀티탭에 또 멀티탭을 꽂을 수 있다는 사실을 잊었다. 나처럼 잘 이해가 안 되는 사람들을 위해 그림을 하나 그려봤다. (발(🦶🏾) 그림 주의) 예를 들어 입력이 4 4 3 2 1 이라고 가정해보자. 벽 단자는 그림의 이해를 위해서 그린 것이고 멀티탭만 보면 된다. 이미 꽂혀 있는 멀티탭을 제외하고 남은 멀티탭에서 최대 개수를 구할 때 규칙을 찾아보면 각각의 멀티탭은 무조건 하나씩은 꽂혀있기 때문에 총 멀티탭에서 꽂을 수 있는 구멍 - (멀티탭의 수 - 1)가 된다. 그래도 이해가 잘 안 되면 그림을 다시 한번 살펴보자.. 2021. 6. 8.
[ 파이썬(python) ] 백준 1085 - 직사각형에서 탈출 📍 백준 1085 - 직사각형에서 탈출 백준 1085 - 직사각형에서 탈출 💡 나의 풀이 직사각형의 경계선까지 이동하면 되는데, 결론적으로 경계선( w 혹은 h)에 더 가까운 수를 구하면 된다. 또한 직사각형이기 때문에 대각선은 고려하지 않는다. 나의 코드에서 b의 min(x-0, y-0)은 min(x, y)와 동일하지만 사고 흐름을 남겨놓고 싶어 0을 붙였다. 더욱 간결하게 작성하려면 다른 사람의 코드를 참고하자. # 나의 코드 x, y, w, h = map(int, input().split()) a = min(w - x, h - y) b = min(x - 0, y - 0) print(min(a, b)) # 다른사람의 코드 x, y, w, h = map(int, input().split()) print.. 2021. 6. 8.