코딩문제
-
레벨1 : 달리기 경주(C++)코딩문제/프로그래머스 2023. 9. 14. 01:09
URL : https://school.programmers.co.kr/learn/courses/30/lessons/178871?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 가장 직관적이게 풀수 있는방법이 뭘까 하다가 map, map 버퍼 2개를 생성해놓는다. 1. 순위에 따른 이름찾기용 2. 이름에 따른 순위찾기용 위 2가지를 이용해서 추월하는 플레이어랑 그 앞에 선수의 Rank, Name을 각각 담아두는 임시변수를 선언하고 swap 하는과정을 거쳐줌으로 문제를 해결하였다. 다만 비효율적인 과정이 있었는지 테스트케이스에서 거의 2..
-
2레벨 : 124 나라의 숫자코딩문제/프로그래머스 2020. 7. 20. 20:46
진법 문제를 적용하면 된다. 예를들어 우리가 쓰는 10진법은 10으로 나눈 몫과, 나머지를 통해, 수를 표현하는데, 이 문제의 경우, 1,2,4 의 숫자로 우리가 쓰는 10진법의 수를 표현하는것이기에 3으로 나는 몫과 나머지를 이용하면 문제를 푸는데 어려움이 없다. #include #include #include using namespace std; string solution(int n) { string answer = ""; int tmp; char arr[3] = { '4','1','2' }; while (n > 0) { tmp = n % 3; n = n/3; if (tmp == 0) n--; answer = arr[tmp] + answer; } return answer; }
-
2레벨 : 가장 큰 수코딩문제/프로그래머스 2020. 7. 18. 18:22
현재 내 실력으론 해결법이 떠오르지 않아 인터넷의 솔루션을 참고하였다. 정수를 문자형으로 바꿔서, 처리해야지 까지는 생각하였지만, 모든케이스, 즉 각 숫자 더한 값에 따라 비교를 하나씩 전부다 함으로써, 시간복잡도가 n! 로 나와 시간초과 문제에서 막혀있었다. 이를 효율적으로 하기 위해, 다른사람의 풀이를 본 결과, string vector를 하나 더 만들어서 기존 입력의 vector 인자들을 정렬 한 다음, (정렬시, 각 더한 결과가 더 큰쪽으로 오름차순 정렬되게) 이를 조건에 따라 먼저 나온 문자가 0이면 answer 에 0을 그 외의 경우, 해당 인자를 answer 값에 더해줌으로 원하는 정답을 리턴하는 경우로 해결을 하였다. 아직 실력이 많이 부족함을 깨닫고 좀더 많은 문제를 풀어보고 사고력을 키..
-
1레벨 : 자릿수 더하기코딩문제/프로그래머스 2020. 7. 15. 03:08
문자열 처리를 이용한 해결, to_string 으로 정수를 문자열 변환, 이후 string 배열에 있는 값을 하나씩 분리하면서 문자 0의 아스키 코드값을 빼서 정수값으로 처리 이를 result 변수에 더함으로 답을 구함. #include #include using namespace std; int solution(int n) { string a = to_string(n); int result = 0; for (int i = 0; i < a.size(); i++) { result += a[i] - '0'; } return result; }
-
1978 : 소수찾기코딩문제/백준 2020. 7. 13. 02:56
소수 : 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다. 예를 들어, 5는 1×5 또는 5×1로 수를 곱한 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 5는 소수이다. 이러한 수는 결국 1과 자기자신 그외 경우로는 나눠지지 않아야한다. (1 and 자기자신 두개만 가짐) 카운트 변수를 두어, 반복문을 돌리면서 숫자 tmp의 약수가 되는 개수가 2개이면, 소수이므로 카운트변수 cnt를 증가시키게 했고, 이를 출력하였다. #include using namespace std; int main() { int n, cnt2, cnt=0; cin >> n; for (int i = 0; i > tmp; cnt2 = 0; for (..
-
9613 : GCD 합코딩문제/백준 2020. 7. 13. 02:44
이번에는 유클리드 알고리즘을 적용한 재귀함수를 이용해 최대 공약수를 이용하기로 하였다. 메인함수내에서 벡터들을 처리하면서, 비효율적으로 처리된것 같긴한데, 이를 어떻게 효율적으로 할진 천천히 생각해봐야겠다. 처음시도에 gcd 합을 담는 sum을 int형을 사용했는데 오답이라 떠서, 입력 조건을 보니, int범위를 넘을듯싶어 long long int 형으로 좀더 범위가 큰 데이터형을 쓰니 정답처리가 되었다. #include #include using namespace std; int max_num(int a, int b) { //최대공약수 if (b == 0) return a; return max_num(b, a%b); } int main() { int n, n2; long long sum=0; vecto..
-
1934 : 최소공배수코딩문제/백준 2020. 7. 13. 00:56
최소공배수 구하는 식을 생각하면 간단한 문제다. (a,b의 최대공약수 * 숫자a * 숫자b) 최대공약수 구하는것은, a,b중 작은 수를 기준으로, 변수하나(num)를 만들어서 값을 넣고 반복문 돌리면서, 1씩 빼주면서, 두 수를 각각 num으로 나눈 나머지가 0이면 해당 num이 최대 공약수가 된다. #include #include using namespace std; int max_num(int a, int b) { //최대공약수 int num = 0; if (a > b) { for (int i = b; i > 0; i--) { if (a%i == 0 && b%i == 0) return num = i; } } else { for (int i = a; i > 0; i--) { if (a%i == 0 &&..
-
1레벨 : 제일 작은 수 제거하기코딩문제/프로그래머스 2020. 7. 10. 18:32
stl 에 익숙해지기 위해, algorithm, vector를 사용하여 문제를 풀기로 함. 문제설명에 보이듯, 배열 인수가 하나이면, vector의 pop 을 시키고, -1을 push, 그렇지 않은 경우, 벡터를 하나 더 생성하여, 기존벡터(배열)를 복사한 후, 오름차순 정렬을 시키면, 이 복사한 배열의 0번째 값이 최소값이 된다. 이를 find 함수를 통해 위치를 찾은 후, 인자를 지워주면 된다. #include #include #include using namespace std; vector solution(vector arr) { vector tmp; vector tmp2; tmp = arr; tmp2 = tmp; if (tmp.size() == 1) { tmp.pop_back(); tmp.push..