본문 바로가기

Algorithm7

[BOJ][Python3]12933. 오리 문제 유형: 구현 https://www.acmicpc.net/problem/12933 12933번: 오리 첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다. www.acmicpc.net 퍼포먼스가 낮지 않으면서도 꽤 특이한 풀이를 작성했다고 생각해서 공유하고자 한다. 문제에서 묻는 건 오리의 수인데, q,u,a,c,k 이렇게 오리가 순서대로 운다. 다만 중첩해서 울 수도 있는데(qquuaacckk) 이런 경우는 오리가 두 마리 있는 경우다. 다만 invalid한 quack이 있을 수 있다. 순서가 맞지 않거나 글자가 하나 빠진 경우가 있기 때문이다. 대강 젤리코코라는 플래시게임을 상상.. 2024. 3. 5.
[C++] 문자열로 곱셈과 덧셈 구현하기 C++에서 long long int에도 담기지 않는 수가 있다. 9,223,372,036,854,775,807이 가장 큰 수라고 하는데, 그것보다 더 큰 수를 계산해야 하는 경우는 어떻게 해야 할까? 2^1239 을 계산하고 싶을 땐 어떻게 해야 할까? 그 방법 중 하나가 문자열로 곱셈과 덧셈을 구현하는 것이다. 원리는 아주 간단하다. 손으로 두자릿수의 곱셈과 덧셈을 해보자. 한 자리씩 더하거나 곱할 때 carry가 발생하면 다음 자리수로 넘겨서 더해준다. 따라서 손으로 하는 필산을 프로그램으로 구현한 것이 되겠다. 1. sum두 수를 문자열로 받고, 뒷 자리수부터 시작해서 carry 가 발생할 경우 자리수 올림까지 고려한다. 두 수의 덧셈을 문자열로 반환한다.이때 a[Sizea]에서 0을 빼는 건 뭐냐.. 2022. 12. 5.
[BOJ][Python3]2504.괄호의 값 문제 유형: 구현 요번에는 어떻게든 풀었지만, 좋지 않은 코드의 예시다. stack에 괄호 넣고 빼면서, 대체 어떻게 덧셈 + 곱셈을 구현하지? 라는 고민을 정말 많이 했다. 재귀로도 해보고, visited 배열을 만들기도 해보고 시도를 여러가지 하다 일반화가 잘 되지 않았다. 나름 해결한 방법으로는 score에 값을 하나씩 넣고 그 값에 대한 괄호 depth를 계산한 뒤, 같은 depth인 괄호는 더하고, 1 작은 depth를 만나면 곱하는 식으로 구현했다. 풀이 설명 ( () [ [] [] ] ) 이면 하나씩 짝 맞춰질때마다 스택에서 빼고 score에 append하면 score = [ 2, 3, 3, 3, 2] depth = [1, 2, 2, 1 , 0] 이다. 왼->오로 탐색하면서 최대 depth .. 2022. 11. 27.
[BOJ][Python3]15686.치킨 배달 문제 유형: 구현 collection에 combination을 쓰면 된다. 여담이지만 pypy로 채점 돌렸을때 메모리+런타임으로 1등 먹어서 살짝 기분이 좋았다 ㅎㅎ 시간이 지나면 한순간의 꿈일 것 같지만... 문제 포인트는 다음과 같다 1) 입력을 받으면서 집, 치킨집 위치를 튜플로 저장해서 배열에 넣어두기 2) 미리 각 집의 모든 치킨집 위치에 대한 걸 계산해서 배열에 저장해 두기(그렇다면 나중에 치킨집을 고르고 일일히 계산하지 않아도 된다) 3) 치킨집의 경우의 수를 combination으로 뽑고, 각 경우의 치킨 거리 계산하기 처음에 문제를 잘못 이해해서 현재 치킨집 수 = 남길 치킨집 수의 경우 일일히 비교하는 로직을 안 쓰고 바로 답을 구하는 모종의 방법을 사용했는데 그 로직에 문제가 있어서 .. 2022. 11. 24.