알고리즘 문제풀이/프로그래머스
-
[프로그래머스/Level 2] 기능개발 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 28. 16:23
programmers.co.kr/learn/courses/30/lessons/42586?language=cpp 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 풀이 앞에서 부터 차례대로 작업의 진도를 비교해야하므로, 큐를 이용하는 것이 좋다고 판단하였다. 1. 배포 기간을 계산해 큐에 집어 넣는다. 2. 큐가 전부 pop 될 때까지 현재 큐의 front를 저장한 now와 pop한 후의 front를 비교하여 now가 크거나 같을 때까지 계속 cnt를 증가시킨다. (이때 큐가 현재 비어있지 않은 상태인 것..
-
[프로그래머스/Level 2] 최댓값과 최솟값 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 28. 14:00
programmers.co.kr/learn/courses/30/lessons/12939 코딩테스트 연습 - 최댓값과 최솟값 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 (최소값) (최대값)형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를 programmers.co.kr 풀이 임시 문자열 저장 변수를 선언하여 공백을 기준으로 더해가며 이를 정수형으로 바꾼 후, 벡터에 삽입한다. 그리고 오름차순으로 정렬하면 맨 앞의 원소는 최솟값, 맨 뒤의 원소는 최댓값이 되므로 front()와 back()을 이용하여 쉽게 찾아낼 수 있다. 다른 방법으로는 stringstream을 이용하여 문자열을 split하는 것이다. stringst..
-
[프로그래머스/Level 1] 다트 게임 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 28. 01:30
programmers.co.kr/learn/courses/30/lessons/17682 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 풀이 1. 이전 점수를 저장할 변수 prev, 현재 점수를 저장할 변수 now 선언 2. now의 값을 prev에 저장하고, 문자열에서 숫자인 부분을 찾아 now에 저장 (이때 숫자가 10인 경우를 따로 예외처리) 3. 문자열에서 S, D, T인 경우에 따라 pow() 함수를 이용해 처리하여 점수를 계산 (S인 경우는 1제곱이므로 생략) 4. 현재 인덱스의 다음 위치에 *이나 #이 있는지 확인하여 조건에 맞게 보너스 점수 처리 (스타상(*)인 경우 이전 점수를 빼주고, 2배를 한 새로운 이전 점수를 갱신해주는게 포인트!) 5. 현재 점수인 now를..
-
[프로그래머스/Level 1] 비밀지도 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 27. 16:11
programmers.co.kr/learn/courses/30/lessons/17681 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다 programmers.co.kr 풀이 10진수의 값을 2진수로 자유롭게 변경할 수 있다면 어렵지 않게 풀 수 있는 문제입니다. 알고리즘은 다음과 같습니다. 덱을 선언한 후, 10진수의 값을 2로 계속 나눠가며 그 나머지 값을 push_front()를 이용하여 넣어줬습니다. 그 후, 2진수로 변환된 수의 길이를 맞추기 위해서 n과 일치할 때까지 0을 push_front() 해줬습니다. 예를들어 n=5이..
-
[프로그래머스/Level 1] 행렬의 덧셈 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 27. 14:57
programmers.co.kr/learn/courses/30/lessons/12950 코딩테스트 연습 - 행렬의 덧셈 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요 programmers.co.kr 풀이 blockdmask.tistory.com/256 [Level 1] 행렬의 덧셈 안녕하세요 BlockDMask 입니다. 프로그래머스 알고리즘 문제 풀어보겠습니다. 171107 문제 빼먹음 -> 171213 완료 0. 제목 프로그래머스 Level 1 행렬의 덧셈 Programmers Level 1 Sum of matrix C++ vector c..
-
[프로그래머스/Level 1] 최대 공약수와 최소 공배수 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 27. 14:08
programmers.co.kr/learn/courses/30/lessons/12940 코딩테스트 연습 - 최대공약수와 최소공배수 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 programmers.co.kr 풀이 유클리드 알고리즘을 이용하여 두 수의 최대 공약수와 최소 공배수를 구하는 문제이다. 유클리드 알고리즘이란 a=12, b=18이라고 할 때, b를 a로 나눈 나머지가 0이면 a가 최대 공약수가 되고, 만약 0이 아니라면 b의 값을 a로, b%a의 값을 b로 두어 이를 나눈 나머지가 0인지 계속 확인하는 것이다. 이렇게 최대 공약수를 구하고 ..
-
[프로그래머스/Level 1] 키패드 누르기 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 26. 21:41
programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 풀이 문제 자체는 어렵지 않다고 생각하는데, 좌표를 pair형으로 저장할 생각을 하지 못해서 구현하는 과정에서 복잡해지는 바람에 잦은 실수가 많았다. 결국 구글에서 약간의 힌트를 얻어서 해결했다. 전체 코드 #include #include using namespace..
-
[프로그래머스/Level 1] 시저 암호 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 26. 17:18
programmers.co.kr/learn/courses/30/lessons/12926 코딩테스트 연습 - 시저 암호 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 programmers.co.kr 풀이 아스키코드에 대칭되는 정수값을 이용하는 문제이다. 문자를 밀어낼 때, 'Z'와 'z'의 값을 벗어나면 다시 'A', 'a'로 돌아가도록 처리를 해줘야하는데, (현재의 문자 + 미는 크기 - 26) 식을 통해 위의 처리를 해줄 수 있다. ex) 'Y'의 경우 아스키 코드 값은 89, 4칸을 밀면 89+4=93이 되고, 이는 'Z'(90)의 범위를 넘어..