문제풀이 6

[백준/C++] 14888번 연산자 끼워넣기

🤔문제 이해 중복이 존재하고, 순서에 상관있게 나열하는 연산자 순열의 모든 경우에 대해 계산한 값의 최솟값과 최댓값을 찾는 문제이다. 💡첫번째 아이디어 브루트 포스, 즉 모든 경우의 수를 찾아보고 계산해 비교해봐야 최솟값과 최댓값을 찾을 수 있겠다고 생각했다. 모든 경우를 트리 모양으로 나타내보면 n번째 연산 다음에 올 수 있는 연산들은 n번째 연산이라는 공통된 값을 가지고 연산을 수행하므로 DFS를 이용해 풀면 될 것 같았다. 계산 결과나 계산 도중에 나오는 값들은 정수형인 int의 범위 안에 들어가므로 변수는 int로 선언하고, N의 범위가 11 이하이므로 이 아이디어로는 시간 초과 걱정은 없음! 🔥풀이🔥 main에서 +, -, x, / 를 각각 한번씩 dfs 함수를 실행시켜 준다. dfs함수는 연산..

백준/C++ 2022.07.13

[백준/C++] 1790번 수 이어 쓰기 2

🤔문제 이해 1부터 N까지 숫자를 이어써서 만든 수의 k번째 자리의 숫자를 구하는 문제! 문제가 짧은 만큼 간단했다. 💡첫번째 아이디어 간단하게 생각했을 때 N의 자릿수가 n일 때 새롭게 만들어지는 수는 1*9 + 2*90 + 3*900 + ... (n-1)*((10^n -1)-(10^n-2))에 가장 작은 n자리 수부터 n까지를 더하면 구할 수 있을 것이라고 생각했다. k를 찾을 때에는 k가 포함되는 곳이 몇 자릿수일 때인지를 파악해서 최악의 경우 10000000~9999999까지 탐색하므로 시간 제한에 걸리지 않을 것이라고 판단했다. 🔥풀이🔥 첫번째 반복문 -> k가 포함되는 자릿수 구하기 두번째 반복문 -> 해당 자릿수의 최솟값~최댓값까지 total에 자릿수를 더해주면서 k가 포함되는 범위를 찾고 ..

백준/C++ 2022.07.11

[백준/C++] 15558번 점프 게임

💡첫번째 아이디어 일단 보자마자 BFS임을 알았다! 일단 갈 수 있는데는 다 가보는데 안되면 끝인거니까 간단하게 map이라는 2차원 배열을 사용하여 두개의 지도를 표현해 주었고, BFS의 큐에는 몇초가 지났는지를 의미하는 cnt, 현재 지도의 위치를 나타내는 idx, 어떤 지도인지를 나타내주는 map_num의 정보를 담고 있는 pair 형태로 구성해주었다. 간단하게 +1, -1, 반대편 +k이므로 해당 지도의 값이 1이고, 사라지지 않은 idx일 경우에 큐에 넣어주고 idx가 n보다 커졌을 때 1을 출력하고 그렇지 않고 큐가 다 비게 되면 0을 출력한다. ❌첫번째 제출(4%에서 틀렸습니다) 예제 출력은 잘 나왔는데 제출해보니 틀렸다고 떴다. 문제를 다시 읽어보니 지도에서 먼저 이동하고 cnt가 커지는 방..

백준/C++ 2022.07.07

[백준/C++] 25212번 조각 케이크

💡첫번째 아이디어 이번 문제는 모든 경우의 수를 다 생각해봐야 할 것 같았다. DFS를 이용한 모든 조합의 경우를 다 탐색해보는 알고리즘으로 구현해보았다. (구글링 참고했음,,) 일단 nCr에서 n은 문제에서 주어지고, r은 bound 변수로 반복문을 통해 1~n까지 다 DFS를 돌게 된다. DFS 함수는 시작 인덱스인 idx와 현재까지 선택된 케이크의 개수를 나타내는 cnt가 parameter로 전달되고 cnt가 bound가 같아지면 check를 통해 선택된 수들의 역수(1/x)를 total변수에 더해주고 total이 0.99보다 크고 1.01보다 작으면 경우의 수를 나타내는 ans를 ++해준다. DFS의 반복문은 예시를 들어보자. n = 4, bound = 2 일때 DFS(0,0)이 실행되면 idx ..

백준/C++ 2022.07.03

[백준/C++] 25215번 타이핑

💡첫번째 아이디어 소문자대문자로 바뀔때마다 끊어서 문자열의 개수를 센 배열을 만들었다. 예를 들어 iLoveINHA의 경우 1(i) / 1(L) / 3(ove) / 4(INHA)로 만들고 그 사이에 별과 마름모가 들어가는 규칙을 찾아봤다. 예제 1) iLoveINHA => 1 1 * 3 ◆ 4 예제 2) ConquerThePlanet => 1 * 6 1 * 2 1 * 5 같은 크기별로 나눈 문자열의 첫번째가 대문자인지 소문자인지 확인해서 대문자면 숫자 배열의 홀수번째가 대문자, 소문자면 숫자 배열의 짝수번째가 대문자이다. 따라서 홀/짝에 따라 대문자/소문자를 구분한다. 현재 마름모가 활성화되었는지 같은 크기의 문자가 몇개인지 확인 1. 활성화 1.1 대문자 (1개orN개) - 그냥 입력 1.2 소문자 (..

백준/C++ 2022.06.29
728x90