[C_C++]코딩테스트 연습

    [프로그래머스] 기능개발 - C++ 스택&큐

    [프로그래머스] 기능개발 - C++ 스택&큐

    내 풀이 - 큐 사용 1. 진도가 100이 되려면 며칠이 걸리는지 days 벡터에 넣어논다. 남은 진도율 : 100 - progresses 작업속도 : speeds 남은 진도율에서 작업속도를 나누면 진도율이 남는 경우가 있다. 이 경우 1을 더해야 한다. 하지만 딱 맞아 떨어지는 경우에는 1을 더할 필요가 없다. => 100이 아니라 99에서 빼면 모든 경우에 1을 더해도 된다. //예시 99-93 = 6, 6/1 + 1 = 7 99-30 = 69, 69/30 +1 = 3 2. 첫번째 days 요소를 큐에 넣어놓는다. 그리고 큐의 맨앞과 days를 비교해서 뒤에 오는 days가 더 작으면 큐에 붙인다. 3. 다음 days가 더 크면 큐의 사이즈를 answer에 붙인다. 그리고 큐를 재선언해서 비운다. 4..

    [C++] 프로그래머스 hash 2 - 위장

    [C++] 프로그래머스 hash 2 - 위장

    [Level 2] 내 풀이 옷의 종류와 개수를 담는 unordered_map을 만든다. 예를 들어 얼굴 2, 상의 1, 하의 1 일 경우를 생각해보면 안 입는 경우를 0으로 두어 (0,1,2), (0,1), (0,1) 을 갖는다고 생각할 수 있다. 적어도 하나 이상은 입으므로 (옷 종류마다의 개수+1)끼리 곱한 후 전부 0인 경우 1가지를 빼주면 된다. (3*2*2 - 1 = 11) int solution(vector clothes) { int answer = 1; unordered_map map; for (auto i : clothes) { map[i[1]]++; } for (auto i : map) { answer *= i.second + 1; } return answer - 1; }

    [C++] 프로그래머스 hash 2 - 전화번호 목록

    [C++] 프로그래머스 hash 2 - 전화번호 목록

    [Level 2] 처음 내 풀이 : 정확성 83.3(만점) 효율성 8.3 = 91.7 로 실패 bool solution(vector phone_book) { sort(phone_book.begin(), phone_book.end()); for (int i = 0; i < phone_book.size(); i++) { for (int j = i + 1; j < phone_book.size(); j++) { int split_size = phone_book[i].size(); cout

    [C++] 프로그래머스 - 부족한 금액 계산하기

    [C++] 프로그래머스 - 부족한 금액 계산하기

    프로젝트 하느라 코테 연습을 좀 등한시했어서 오랜만에 다시 해봤더니 위클리 챌린지라는 게 생겼다. using namespace std; long long solution(int price, int money, int count) { long answer = 0; for (int i = 1; i money) return answer - money; else return 0; } 알고리즘 자체의 난이도는 쉬우나, money 의 범위가 10억이기 때문에 answer를 기본 설정된대로 int로 두면 문제가 생긴다. int 의 자료형은 약 -21억~21억의 수를 담을 수 있기 때문이다. count와 price의 곱을 계속 더해주므로 실제 answer의 자료형은 int보다 큰 long, long long 등으로 해..

    [C++] 콜라츠 추측 - 3번째 기본 예제, 13번 주의

    [C++] 콜라츠 추측 - 3번째 기본 예제, 13번 주의

    내 풀이 그냥 보면 되게 쉬운 문제인데 까보니 좀 까다로운 문제였다. 처음엔 3번째 테스트 케이스에서 -1이 아니라 488이 나오는데, 아마 3을 곱하고 1을 더하면서 int의 범위를 벗어나는 등의 문제가 생기기 때문이 아닐까 싶다. 이는 짝수 케이스의 else로 홀수를 잡지 않고 num % 2 == 1 else if 문으로 홀수를 잡아서 해결했다. 처음에 return i+1을 포문 맨 밑에 두고 제출해보니 13번에서 오류가 났는데, 1을 넣었을 때는 해당 과정을 거치지 않는 점을 고려하지 못해서였다. 이는 포문 맨 위에서 num==1인지 검사하고 return 함으로써 해결했다. #include #include using namespace std; int solution(int num) { for (in..

    [C++] 프로그래머스 - 이상한 문자 만들기

    [C++] 프로그래머스 - 이상한 문자 만들기

    내 풀이 길이만큼 포문 돌려서 카운트 세며 짝수면 대문자 홀수면 소문자 띄어쓰기 만나면 초기화 딱 이렇게 적어놓고 했더니 금방 풀었다! 예상보다 배점이 높아서 올려본다. #include #include using namespace std; string solution(string s) { int cnt = 0; for (int i = 0; i < s.size(); i++) { if (s[i] != ' ') { if (cnt % 2 == 0) s[i] = toupper(s[i]); else s[i] = tolower(s[i]); cnt++; } else cnt = 0; } return s; }

    [C++] 프로그래머스 - 시저 암호

    [C++] 프로그래머스 - 시저 암호

    내 풀이 #include #include using namespace std; string solution(string s, int n) { for (int i = 0; i = 'A' && s[i] 'Z') s[i] -= 'Z' - 'A' + 1; s[i] += n; } else if (s[i] >= 'a' && s[i] 'z') s[i] -= 'z' - 'a' + 1; s[i] += n; } } return s; } s[i] += n; 을 한줄 위로 썼을 때 왜 오류가 뜨나 했더니... 아스키 코드표를 보면 z가 122라서 126을 넘어가면 이상한 문자가 나와버린다ㅠㅠㅠ 그래서 먼저 빼주고 더해주면 해결이 됐다. 금방 끝날걸 한참 찾았다....

    [C++] 프로그래머스 - 소수 찾기

    [C++] 프로그래머스 - 소수 찾기

    그냥 기본적인 이중포문을 돌리면 정확성 테스트부터 시간초과가 난다. 풀이 1 (정확성 통과, 효율성 시간초과) #include #include using namespace std; int solution(int n) { int answer = 1; vector prime = { 2 }; for (int i = 2; i