본문 바로가기

구현

(72)
[C++] 5658번 [모의 SW 역량테스트] 보물상자 비밀번호 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo 25/02/07  16진수 변환을 곁들인 귀찮은 구현문제다. 문제 접근 방식:  주어진 숫자들이 16진수로 주어진 수들이기 때문에, 16진수로 주어진 수를 10진수로 변경하는 함수를 구현하는 것이 핵심이다. 이 문제에서 유의할 점은, 범위가 int범위를 넘어갈 수도 있다는 점이다. $N$이 최대 28까지이고, 그 말은 최악의 경우 FFFFFFF라는 16진수 수를 10진수로 변경해야하는 일이 있을 수 있다. 실제로 10진수로 변경해보면 int범위를 조금 넘어가기 때문에 long long으로 받아야 한다.(2억이랑 21억이랑 헷갈려서 잘못된 ..
[C++] 32999번 Ribbon on the Christmas Present https://www.acmicpc.net/problem/32999 25/01/06  간단한 그리디+구현 문제다. 문제 접근 방식:  그니깐, 쉽게 생각하면 덧칠한다고 생각하면 된다. 한 번의 붓질로 같은 밝기를 쭉 칠할 수 있는데, 덧칠하면 덧칠할 수록 더 어두워지는 것이다. 근데, 붓질 횟수가 최소가 되려면, 한 번 쭉 붓질할 때 최대한 많은 칸을 칠하는 것이 이득일 것이다. 예를 들어 $[50, 100, 50, 50, 100, 50]$이라면 맨 처음 $50$칠할 때 처음 칸부터 끝 칸까지 칠하고, 이후 2번째, 5번째 칸에 $50$만큼 더 덧칠하면 3번으로 완성할 수 있다. 이걸 코드로 구현해본다면, 기존 주어진 $A$가 있고, 그 배열의 0에 의해 끊어지지 않은 연속된 구간이 있다면 그 구간의 최..
[Python] 9612번 Maximum Word Frequency https://www.acmicpc.net/problem/9612 24/11/30  간단한 실버 문제다. 문제 접근 방식:  각 단어의 빈도 수를 나타내는 딕셔너리 $D$를 선언해준다. 이후 각 단어가 새로 나오면, 그 단어를 딕셔너리에 새롭게 넣고 값을 $1$로 설정, 이미 나왔던 단어였다면 기존 값을 $1$ Increasing하도록 설정했다. 이후 가장 자주 나오는 빈도수를 가진 단어, 그 중에서도 가장 사전순으로 뒤에 있는 단어와 그 빈도수를 출력하면 되는데, 이건 그냥 $D$에 있는 각 단어의 빈도수를 계속 비교하면서 갱신하는 형식으로 구현했다. 파이썬에서는 두 문자열이 사전 순인지를 그냥  맨 처음에는 파이썬 collections모듈의 Counter자료형을 쓸 까 생각했지만, Counter자료형..
[Python] 2733번 Brainf*ck https://www.acmicpc.net/problem/2733 24/11/18  입력 커맨드를 제외한 brainfuck 인터프리터를 구현하는 문제이다. 문제의 핵심 부분은 괄호 쌍을 찾아서 넘어가는 부분이다. 문제 접근 방식:  구현의 용이성을 위해, 먼저 파싱부분과 인터프리터 부분을 나눴다.  기본적으로 파싱부분은 하나의 테스트 케이스를 입력받아서 프로그램에 해당하는 하나의 문자열을 내뱉는 함수로 구현했다. 하나의 테스트 케이스는 'end'만 적혀 있는 문자열로 구분된다. 따라서 'end'라는 문자열이 입력되기 전 까지 계속해서 입력을 받는다. 파이썬은 줄바꿈을 기준으로 문자열을 입력받기 때문에, while True를 사용하여 'end'를 입력 받을 때까지 계속 입력받도록 했다. 이후, 주석의 처리..
[Python] 32612번 Expected Eyes https://www.acmicpc.net/problem/32612 24/11/15  두 가지 방법으로 풀 수 있다. 둘다 소개해보려고 한다. 문제 접근 방식:  1. 파이썬의 itertools모듈의 product함수를 이용한다. 직접 모든 가능한 경우의 수를 조사하면서 기댓값을 구한다. 이 접근방식의 시복도는 최대 $\mathcal{O}(8^8)$이다. 따라서 파이썬3로는 통과하기 힘들고 파이파이로 하면 통과된다. 2. 기댓값의 선형성 이용 전체 기댓값은 선형성에 의해 각 주사위의 기댓값의 합과 같다. 이를 이용하면 한줄로 코딩할 수 있다.아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.더보기# 32612번 Expected Eyes# 1. 나이브한 반복 풀이..
[Befunge] 2380번 Star https://www.acmicpc.net/problem/2380 24/11/12  오랜만에 파이썬 외의 다른 언어로 풀어보는 문제다. Isolang 중 하나인 Befunge언어를 사용하여 주어진 그림을 출력하면 되는 문제다. 문제 접근 방식:  문제는 간단하다. 주어진 Output을 비펀지언어로 구현하면 끝. 처음에는 귀찮아서 GPT한테 맡겼더니 해결을 못했다. 모델을 바꿔서 해도 해결이 안되길래, GPT한테 해당 언어의 주요 기능을 알려달라고 했다. 비펀지는 2차원 그리드 위에서 실행되는 스택기반 언어로, 공백이 더 들어가거나 탭이 잘못들어가면 이상하게 꼬인다. 주요기능은 다음과 같다. 1. 숫자(0~9)해당 숫자를 스택에 넣는다. 2. 산술연산자(+,-,*,/,%)스택에 들어있는 두 숫자를 pop하..
[Python] 19778번 Игра https://www.acmicpc.net/problem/19778 24/05/20  그룹 연습 문제로 풀었던 문제다. 간단한 게임 이론 + 구현 문제다. 최적의 전략을 생각하는 것이 그다지 어렵지는 않지만, 이를 실제로 구현하는 것이 전략을 생각하는 난이도에 비해서 조금 까다로운 편이다. 골드 5에 비해 난이도가 낮다고 생각이 되어서 낮게 측정했다. 문제 접근 방식:  러시아어로 되어 있는 문제이기 때문에 번역을 하면 다음과 같이 번역할 수 있다. 문제 번역:체육 수업 시간에 1학년 페티야와 바샤가 흥미로운 게임을 하고 있습니다. 남학생들 앞에 높이가 다른 $n$개의 기둥이 일렬로 서 있습니다. 남학생들은 $m$개의 반지를 가지고 번갈아 가며 기둥에 던지는데, 기둥에 이미 반지가 있으면 이 기둥에 반지..
[Python] 21772번 가희의 고구마 먹방 https://www.acmicpc.net/problem/21772 24/05/14  업다운 랜디를 하다가 만난 문제이다. 처음에는 BFS로 접근할까 하다가 DFS로 방향을 틀어 접근했다. 문제 접근 방식:  BFS로 접근할 수도 있다. 그 이유는 최대 10번을 탐색하고 한 번 할 때 4방향을 탐색하기 때문에 $4^{10}$번만 탐색하면 충분하고, 이는 시간 안에 들어오기에 충분하기 때문이다. 하지만 DFS로 접근하는 것이 더 쉬울 것 같아서 DFS로 접근했다. 무의식 중에 재귀 깊이를 10만으로 늘린 코드를 작성하긴 했지만, 사실은 10번만 탐색하기 때문에 그렇게까지 깊게 늘리지 않아도 되었던 것 같기도 하다. DFS를 진행하는데, 들어간 자리에 고구마가 있으면 고구마를 먹었다는 표시로, 고구마 글자를..