[C_C++]코딩테스트 연습/[프로그래머스] level 1

    [C++] 프로그래머스 - 체육복 (그리디)

    [C++] 프로그래머스 - 체육복 (그리디)

    그리디의 대표 문제 중 하나인 체육복이다. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 요약 전체 학생 n(2~30)명 중 체육복을 도난당한 학생들(lost)이 있다. 체육복이 없는 학생의 앞뒤 번호 중 여벌을 가져온 학생(reserve)이 있으면 체육복을 빌린다. 도난은 1개씩만 당하며, 여벌을 가져온 학생도 도난 당해서 여벌이 없어졌을 수 있다. 이렇게 빌려서 수업을 들을 수 있는 학생 수의 최대값을 반환하면 된다. 내 풀이 학생수만큼 각 번호에 1을 담은 배열을 두고, 도난을 당했으면 1을 빼고 여벌을 가져왔으면 1을 더해준다. lost를 정..

    [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

    [C++] 프로그래머스 - 문자열 다루기 기본

    [C++] 프로그래머스 - 문자열 다루기 기본

    내 풀이 #include #include using namespace std; bool solution(string s) { bool answer = true; if(s.length() != 4 && s.length() != 6) answer = false; for(int i = 0; i '9') answer = false; } return answer; } 쉬운데 점수를 많이 줘서 놀랐다ㅇㅅㅇ

    [C++] 프로그래머스 - 문자열 내 마음대로 정렬하기

    [C++] 프로그래머스 - 문자열 내 마음대로 정렬하기

    #include #include #include using namespace std; int g; bool special(string& a, string& b) { if (a[g] != b[g]) return a[g] < b[g]; else return a < b; } vector solution(vector strings, int n) { g = n; sort(strings.begin(), strings.end(), special); return strings; } 내 풀이 sort에 bool 비교함수를 쓰고 싶어서 끙끙대다가 비교함수에 인자 전달하는 방법이 따로 없는 것 같아서 그냥 전역변수에 전달했다.