Problem Solving(33)
-
[프로그래머스/C++] 신규 아이디 추천
안녕하세요. 이번에는 프로그래머스 코딩 테스트 연습 Lv1. 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천을 풀어봤습니다. 문제는 비밀번호를 입력받고 입력받은 비밀번호를 아래 규칙대로 바꿔주면되는 문제입니다. 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다. 6단계 new_id의 길이가 16자 이상이면,..
2022.09.15 -
[프로그래머스/C++] 크레인 인형뽑기
안녕하세요. 이번에는 프로그래머스 코딩테스트 연습 Lv1 2019 카카오 개발자 겨울 인턴쉽 - 크레인 인형뽑기를 풀어봤습니다. #include #include #include using namespace std; int solution(vector board, vector moves) { int answer = 0; int n = board.size(); stack list; for(int i = 0; i < moves.size(); ++i){ int location = moves[i]-1; for(int y = 0; y < n; ++y){ if(board[y][location] == 0) continue; if(!list.empty() && list.top() == board[y][location])..
2022.09.14 -
[BOJ]10809 - 알파벳 찾기 [C++]
안녕하세요. 오늘은 백준 브론즈 2문제인 알파벳 찾기를 풀이해보겠습니다. 알파벳 소문자로만 데이터가 주어지고, 해당 데이터에서 처음 알파벳이 나오는 지점을 저장해주고 출력해주는 문제입니다. 이 문제에서 핵심은 알파벳이 '처음'으로 등장하는 위치를 저장해주는 것이 중요하다고 생각했습니다. 그래서 저 같은 경우 위치를 저장해주는 배열을 애초에 -1로 초기화하고, 해당 위치 배열의 값이 -1이 아니면 건너뛰도록 했습니다. 코드를 보겠습니다. #include #include using namespace std; int main() { string str; int arr[100]; char alpa[26] = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n',..
2022.02.16 -
[BOJ]5585 - 거스름돈[C++]
이번에는 백준 5585 거스름돈을 풀어보겠습니다. 지불할 돈을 입력하고 잔돈의 개수를 구하면되는 문제입니다. 이건 최대값(500)부터 빼주면서 계산해주면 됩니다. 코드를 보겠습니다. #include using namespace std; int main() { int n, tot = 0, cnt = 0, tmp = 0;; int arr[6] = { 500, 100, 50, 10, 5, 1 }; cin >> n; tot = 1000 - n; for (int i = 0; i = arr[i]) { tot -= arr[i]; ++cnt; } else break; } } cout
2022.02.05 -
[BOJ]1026 - 보물 [C++]
안녕하세요. 오늘은 BOJ 1026번 보물을 풀어보겠습니다. 그리디 알고리즘으로 분류되어 있는 문제입니다. 배열 두개에 N개의 수열을 입력받고 A * B의 총합을 구하는데, 그 총합이 최소가 되게해야하는 문제입니다. 두 수열을 곱한 값의 총합이 최소가 되려면 두 수열중 큰 값은 작은 값과 곱해져야만 최소를 만들 수 있습니다. 예제를 들어 설명하면, 두 수열 A,B를 모두 정렬하면, A : 0, 1, 1, 1, 6 B : 1, 2, 3, 7, 8 한 뒤에 배열 한 개를 역순으로 뒤집어서 계산해줬습니다. S = A[0] * B[4] + A[1] * B[3] + ... + A[4] *B[0] 이렇게 계산해주면 예제처럼 합이 18이 나오게 됩니다. 코드를 보겠습니다. #include #include #inclu..
2022.02.02 -
[BOJ]11399 - ATM [C++]
문제 분류에서 그리디 알고리즘으로 분류되어 있는 문제입니다. N명의 사람들이 각각 돈을 인출하는데 N분이 걸립니다. 이 문제에서는 모든 사람들이 인출하는데까지 최단시간이 걸리게 해야합니다. 그러려면, 인출하는데 시간이 짧게 걸리는 사람부터 돈을 인출하게 되면, 최단시간이 나오게 됩니다. 위 문제에서 주어진 예제를 보면 순서를 바꾸지 않고 그냥 진행하게 되면 각 사람들이 돈을 인출하는데 걸리는 시간의 합이 39분이 나옵니다. 여기서 시간이 짧게 걸리는 순으로 나열해서 계산을 하게되면 총 32분으로 시간이 단축됩니다. 그러면 프로그램의 흐름은, 시간을 내림차순으로 정리하고, 1번 사람 시간 + (1번 사람 시간 + 2번 사람 시간) + ....+(1번 사람 시간 +...+ n번 사람 시간) 이렇게 계산하면 ..
2022.01.31