본문 바로가기

Computer Basics/Programmers Solutions126

[프로그래머스 lv2] 기능개발 풀이 ✅ 프로그래머스의 모든 문제와 해설 보기[클릭] 해설 문제의 조건을 요약하면, 1. 각 기능들은 완성도가 100%가 되었을 떄 배포된다. 2. 배포는 주어진 순서대로 이루어진다. 즉, 뒤의 기능이 먼저 완성되었다 할지라도 앞에 있는 기능이 배포되지 않았다면 먼저 배포될 수 없다. 가장 먼저, 각 기능에 대하여 배포까지 며칠이 남았는지 구할 수 있다. progresses[i]가 현재까지 진행된 완성도, speeds[i]가 하루에 채워지는 완성도이므로 (100-progress[i])를 speeds[i]로 나눈 몫의 올림값이 배포까지 필요한 일수가 된다. n을 k로 나눈 결과를 올림한 값은 (n+k-1)/k로 구한다. (외워두면 가끔 유용하게 쓸 수 있다!) 따라서, 각 기능에 대하여 배포까지 남은 날은 (1.. 2022. 8. 9.
[프로그래머스 lv2] 124나라의 숫자 풀이 ✅ 프로그래머스의 모든 문제와 해설 보기[클릭] 해설 모든 숫자를 (1, 2, 4) 3가지 수로 나타낸다고 했으므로 3진법과 관련있음을 유추할 수 있다. 10진법을 3진법으로 나타내기 위해서는 3으로 계속 나누어가며 나머지가 무엇인지 살펴야 한다. 나머지가 1일 떄는 1, 나머지가 2일 때는 2, 나머지가 0일 떄는 4를 문자열에 붙이고 맨 마지막에 이를 뒤집어 결과를 리턴한다. 단 주의할 것은, 3으로 나누어떨어질 경우(나머지가 0일 경우) 몫을 1 감소시키고 나머지를 3 증가시켜 3을 4로 변환시키자. 예를 들어, 10을 1, 2, 4 숫자로 변환할 때 10 / 3 = 몫 3 ... 나머지 1 => 1 3 / 3 = 몫 1 ... 나머지 0 => 몫에 1을 뺴주면 나머지는 3이 된다. 나머지 3을 4.. 2022. 8. 9.
[프로그래머스 lv2] 멀쩡한 사각형 ✅ 프로그래머스의 모든 문제와 해설 보기[클릭] 해설 문제를 처음 딱 보고, 아 뭔가 규칙을 찾는 문제구나 하는 생각이 든다. h*w의 직사각형에서 대각선이 지나가는 칸 수를 알 수 있다면 전체 블럭의 개수에서 해당 칸의 개수를 빼 정답을 구할 수 있다. 그렇다면 대각선이 지나가는 칸 수는 어떻게 알 수 있을까? 예제로 나온 8*12의 직사각형을 보면, 일정한 패턴이 반복되는 것을 알 수 있다. 8과 12의 최대공약수 4로 가로와 세로를 각각 나누어보면 2*3의 직사각형이 나온다. 이 직사각형은 전체 직사각형 안에 최대공약수(4개) 만큼 반복된다. 이 작은 직사각형을 보면, 대각선이 지나는 칸의 개수는 2+3-1 = 4개가 된다. 즉, W*H 의 전체 직사각형이 있고, W와 H의 최대공약수를 g라 할 때.. 2022. 8. 9.
[프로그래머스 lv2] 양궁대회 풀이 해설 중복 조합(순서를 고려하지 않고 중복을 허용하여 선택하는 방법)을 통해 0부터 10까지의 과녁 중 n발을 선택한다. n번의 점수를 모두 고른 뒤 각 점수의 개수를 카운트하여 라이언 배열을 생성한다. 라이언과 어피치의 점수를 각각 합산했을 때 라이언이 이긴 경우, 점수 차의 최댓값을 갱신하며 라이언 벡터를 저장한다. 전체 코드 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ii = pair; using iii = tuple; #define X f.. 2022. 3. 24.
[프로그래머스 lv2] 주차요금계산 풀이 해설 주어진 문자열들에서 시각, 차량번호, 입출차 여부를 파싱한다. 입차일 때는 입차시각을 기록해 두고, 출차할 때마다 출차시각에서 최근의 입차시각을 빼 시간을 더해간다. 입차시각만 주어지고 출차시각은 주어지지 않은 케이스는 마지막에 23시 59분까지의 시간을 추가한다. N을 K로 나누어 올림한 결과는 (N+K-1)/K 이므로 이를 이용해 총 요금을 계산하여 요금 배열을 리턴한다. 전체 코드 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; usi.. 2022. 3. 24.
[프로그래머스 lv2] k진수에서 소수 개수 구하기 풀이 해설 문제의 요지는 0으로 둘러쌓인 숫자 중 소수인 수를 카운트 하라는 것이다. 수 n을 k진수로 변환하여 문자열로 저장한다. '0'이 나올 때까지 수를 계산하여 tmp에 저장하고, '0'이 나오면, 지금까지 계산해놓은 수가 소수인지 판단하여 카운트를 1 증가 시킨다. 문자열이 끝날 때까지 해당 작업을 반복한 후 카운트를 리턴하면 된다. 전체 코드 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ii = pair; using iii =.. 2022. 3. 22.
[프로그래머스 lv2] n진수 게임 풀이 해설 수들을 n진수로 변환하여 모든 자리를 문자열로 결합한다. 튜브에게 t번 순서가 돌아온다고 할 때, 튜브는 전체 문자열에서 p, p+m, p+2m, ... , p+(t-1)*m 인덱스에 있는 문자를 말하게 된다. 전체 코드 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ii = pair; using iii = tuple; #define X first #define Y second char conv[16] = {'0', '1', '.. 2022. 3. 22.
[프로그래머스 lv2] [3차]파일명 정렬 풀이 해설 파일명에서 head와 number를 파싱한 후, 배열에 튜플로 저장한다. head와 number를 우선순위로 하여 정렬 후 파일명만 추출하여 리턴한다. 전체 코드 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ii = pair; using iii = tuple; using sii = tuple; #define X first #define Y second vector solution(vector files) { v.. 2022. 3. 22.
[프로그래머스 lv2] [3차]압축 풀이 해설 문제의 의미를 파악하는데 꽤 시간이 걸리는 문제이다. 현재 입력과 일치하는 가장 긴 문자열을 찾으라는 것은, 현재 문자열의 0번째 인덱스부터 특정 인덱스까지가 사전에 있는지 확인하고, 사전에 있는 문자열 중 가장 긴 것을 택하라는 의미이다. 예를 들어 HELLOWORLD라는 문자열이 주어진다면, HELLOWORLD, HELLOWORL, HELLOWOR, HELLOWO, ... , H까지의 문자열 중 사전에 있는 가장 긴 문자열을 찾으라는 것이다. 문자열을 찾은 뒤에는 문제에서 주어진 대로 사전의 색인번호를 결과 벡터에 추가한다. 이후 w+c 단어를 사전에 등록한 뒤, 현재의 문자열에서 사전에 있는 단어를 제거하면 된다. 전체 코드 #include #include #include #include #i.. 2022. 3. 21.
[프로그래머스 lv2] 방금그곡 풀이 해설 musicinfos에 입력된 각 문자열을 파싱하여 벡터에 저장한다. 각 음악마다 총 재생시간을 계산하고, 총 재생시간 동안 플레이된 전체 악보를 구한다. 재생된 전체 음악에 m(들은 부분)과 일치하는 부분이 있으면 결과 벡터에 저장한다. 결과 벡터를 우선순위 대로 정렬하여 가장 우선순위가 높은 음악의 제목을 리턴한다. 전체 코드 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ii = pair; using iii = tuple; using iis.. 2022. 3. 21.