본문 바로가기

전체 글718

[구름톤 챌린지] 8일차 - 통증 [Python] 풀이 14, 7, 1 만큼 감소시키는 아이템을 사용해 N을 0으로 만들기 위해 최소 몇개를 사용해야 하는지 계산하는 문제다. 주어진 아이템의 통증 감소 수치가 서로 배수이기 때문에 무조건 큰 수를 최대한 빼는 greedy 기초 문제다. 반복문을 사용할 필요없이 배수의 몫만큼 최소 갯수를 계산해주면 빠른시간 내 풀이할 수 있다. 출처 구름LEVEL 난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다. level.goorm.io 2023. 8. 23.
[구름톤 챌린지] 7일차 - 구름 찾기 깃발 [Python] 풀이 구름을 주위로 빈 공간이 몇개있는지 세는 방법으로 풀이했다. 게임판의 정보를 입력받을 때, 구름의 좌표를 저장하는 리스트를 만들어주자. 저장한 구름의 좌표를 순회하며, 주위에 구름이 아닌 경우 깃발을 하나씩 꽂아준다( -1씩 감소시킨다) 그렇다면, 이제 구름을 주위로 빈 공간에 대해 깃발을 전부 꽂았을 것이고, -board[x][y] 가 K와 동일한 경우만 찾으면 된다. 출처 구름LEVEL 난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다. level.goorm.io 2023. 8. 23.
[구름톤 챌린지] 6일차 - 문자열 나누기 [Python] 풀이 입력받은 문자열 S로 만들 수 있는 모든 부분 문자열(list_subStr) 쌍 을 loop를 돌며 구간을 업데이트해 만들어주고, 모든 부분 문자열에 대해 중복된 부분 문자열을 제거한 후 정렬해 dict으로 변환해주었다.(dict_subStr) 이제 어떤 부분 문자열이 몇 번째 부분 문자열인지(몇 점인지) O(1) 안에 구할 수 있다. 다시 처음에 구했던 list_subStr의 부분 문자열 쌍들을 dict_subStr와 매칭시키며 점수를 구해 최고 점수를 가지는 부분 문자열 쌍을 찾으면 된다. 출처 구름LEVEL 난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다. level.goorm.io 2023. 8. 21.
[백준 28701] 세제곱의 합 [Python] 풀이 1부터 N까지의 합은 N(N+1) / 2 으로 구할 수 있다. 1^3 부터 N^3까지의 합은 { N(N+1) / 2 }^2 이며, 이는 (1 + ... + N)^2와 동일하다. 위 공식에 입력받은 정수 N을 대입해 결과를 출력해주자. 소스코드 소스코드 보기 출처 28701번: 세제곱의 합 $a$의 제곱은 $a$를 두 번 곱한 수로, $a^2$으로 표현합니다. $a^2 = a \times a$입니다. 또한, $a$의 세제곱은 $a$를 세 번 곱한 수로, $a^3$으로 표현합니다. $a^3 = a \times a \times a$ 입니다. www.acmicpc.net 2023. 8. 21.
[백준 25893] Majestic 10 [Python] 풀이 입력받은 세 정수중 10 이상의 정수의 개수에 따라 알맞는 문자열을 출력하면 되는 문제다. 정수를 입력받고, 길이가 2이상인 수의 개수를 세어주어 정답을 출력했다. 소스코드 소스코드 보기 출처 25893번: Majestic 10 The movie “Magnificent 7” has become a western classic. Well, this year we have 10 coaches training the UCF programming teams and once you meet them, you’ll realize why they are called the “Majestic 10”! The number 10 is actually special in many www.acmicpc.net 2023. 8. 20.
[백준 28439] 행렬 연산 (연산 찾기) [Python] 풀이 모든 행과 열에 대해 연산을 적용해 입력받은 행렬과 비교하는 방법은 시간초과가 날것이 자명하다. 마치 노노그램 게임처럼 그림을 그리듯 테두리의 행/열 값을 가지고 연산을 하면 풀 수 있는 문제다. 행/열에 더하는 수를 R(i), C(j)라 한다면, 다음을 만족한다. R(i) + C(j) = A(i, j) C(j) = A(i, j) - R(i) = A(1, j) - R(1) R(i) = A(i, j) - C(j) = A(i, 1) - C(1) = A(i, 1) - { A(1, 1) - R(1) } = A(i, 1) - A(1, 1) + R(1) 위와 같은 수식을 통해 행렬을 만들 수 있다. 하지만, 이러한 연산의 횟수를 최소화 해야한다. 아래의 예제를 살펴보자. 위 행렬을 만들기 위해 최대 5번의 연.. 2023. 8. 19.