728x90
반응형

알고리즘 258

프로그래머스, 예산 : C++ [CPP]

Greed 하게 풀었는데 Greed를 시도해보니 맞았다. 보다는 Greed를 쓴 이유를 알면 좋다. https://programmers.co.kr/learn/courses/30/lessons/12982?language=cpp #맞은 풀이 #include #include #include #include #include using namespace std; int solution(vector d, int budget) { int answer = 0; sort(d.begin(), d.end()); // 오름차순 정렬. //Greed 방법 적용 -> 가장 적은 부서부터 적용 for(int x : d){ if(x

프로그래머스, 3진법 뒤집기 : C++ [CPP]

우리가 쉽게 하는 n진법 변환을 컴퓨터로 어떻게 표현할까? 생각하면 된다. 역순인 이유도 있었다. https://programmers.co.kr/learn/courses/30/lessons/68935?language=cpp 배운 점 스택으로도 넣어서 꺼내쓸 수 있지만 나는 string으로 연습해봤다. #맞는 풀이 #include #include #include #include using namespace std; //n은 1억 이하인 자연수 //3진수 만드는법 3으로 나누면서 몫과 나머지 조사. int solution(int n) { int answer = 0; int div = 0; //몫 int res = 0; //나머지 string s = ""; div = n; // 초기값. while(div>=3..

프로그래머스, 체육복 : C++ [CPP]

이건 내가 푼 것보다 다른 사람이 훨씬 훨씬 잘풀었다. 참고해서 설명해보자 https://programmers.co.kr/learn/courses/30/lessons/42862?language=cpp #맞는 풀이 #include #include using namespace std; int student[35]; // 학생 배열(체육복의 수가 value) int solution(int n, vector lost, vector reserve) { int answer = 0; for(int i : reserve) student[i] += 1; // 여벌 체육복을 가지고 있는 학생 for(int i : lost) student[i] += -1; // 체육복을 잃어버린 학생 //위 for문을 거치면 결국 빌려줄 ..

프로그래머스, 모의고사 : C++ [CPP]

어렵진 않다만 그냥 여러가지 해줘야 해서 귀찮았다. https://programmers.co.kr/learn/courses/30/lessons/42840?language=cpp #맞는 풀이 #include #include #include using namespace std; int c1[5] = {1,2,3,4,5}; int c2[8] = {2,1,2,3,2,4,2,5}; int c3[10] = {3,3,1,1,2,2,4,4,5,5}; vector solution(vector answers) { vector answer; vector score; int cnt1 =0; int cnt2 =0; int cnt3 =0; int max = 0; for(int i = 0; i

프로그래머스, 완주하지 못한 선수 : C++ [CPP]

어렵다기 보다.. 그냥 해시로 할까 생각이 안나면 못푸는 그러한.. 것? https://programmers.co.kr/learn/courses/30/lessons/42576 십만 * 십만해봐야 100억이지..라고 생각하면서도 왜 가볍다고 생각했는지..ㅎ 즉, 다른 방법을 찾아야했다. #틀린 풀이 #include #include #include using namespace std; string solution(vector participant, vector completion) { string answer = ""; int length = completion.size(); for(int i = 0; i 0) { //answer에 테이블에 key값을 넣음 answer = pair.first; break; ..

프로그래머스, 카카오프렌즈 컬러링북 : C++ [CPP]

어렵지 않았다. 다만 전역변수 초기화를 안해서 20분동안 헤맸다. https://programmers.co.kr/learn/courses/30/lessons/1829# #맞는 풀이 #include #include #define X first #define Y second int dx[4] = {1,-1,0,0}; int dy[4] = {0,0,1,-1}; using namespace std; int visited[100][100]; queue q; // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요. vector solution(int m, int n, vector picture) { for(int i = 0; i

프로그래머스, 숫자 문자열과 영단어 : C++ [CPP]

어렵지는 않지만 그렇다고 단순하지도 않다. 다만 정규 표현식을 아느냐.. 모르느냐에 따라 풀이 시간이 달라진다. 그냥 문자열이 주어졌을 경우는.. 거의 정규표현식이 좋다고 생각하면 된다. https://programmers.co.kr/learn/courses/30/lessons/81301 #맞는 풀이 #include #include #include using namespace std; int solution(string s) { // 원하는 패턴의 문자열을 다른 문자열으로 치환 //regex_replace (대상, 정규표현식 객체, 치환 결과) s = regex_replace(s, regex("zero"), "0"); // "zero"는 다 "0"으로 바꾼다는 뜻 s = regex_replace(s, r..

프로그래머스, 로또의 최고 순위와 최저 순위 : C++ [CPP]

어렵지는 않지만 그렇다고 단순하지도 않다. https://programmers.co.kr/learn/courses/30/lessons/77484 #맞는 풀이 #include #include using namespace std; vector solution(vector lottos, vector win_nums) { vector answer; int curWin = 0; // 일치하는 숫자 int curZero = 0; // 0인 숫자 int min, max = 0; //최저, 최고등수 for(int a : lottos){ if( a == 0){curZero++; continue; } // 당첨번호가 지워져있다면 ++ for(int b : win_nums){ if( a == b){ curWin++; con..

백준, BOJ, 14502번, 연구소 : C++ [CPP]

음.. 생각은 빨리했는데.. 오래걸림.. 왜냐면.. 초기화를 잘못했다. 아...내 1시간반 https://www.acmicpc.net/problem/14502 그렇게 어렵지 않았다. 벽을 무작위로 세워야 하는 것을 이미 알기에.. Brute Force를 해야하는 것은 알았지만 그냥 백트래킹 복습삼아 적용했다. 가장 처음 제출한 풀이.. #include #include #include #define X first #define Y second using namespace std; int map[8][8]; int visited[8][8]; int dx[4] = {1,-1,0,0}; int dy[4] = {0,0,1,-1}; int N,M; int ans = 64; stack stk; // DFS 스택 ve..

백준, BOJ, 2805번, 나무자르기 : C++ [CPP]

우선 숫자가 큰 문제이다. 뭔가 크다. 어렵진 않았지만.. 그냥 오랜만에 푸니까 감이 안왔다. https://www.acmicpc.net/problem/2805 시간초과 될 것을 알면서도 brute force로 해봤다. #include using namespace std; int N,M; int maxi = 0; int sum; int arr[1000001]; int main(){ cin >> N >> M; for(int i = 1; i> a; arr[i] = a; if(a>=maxi){ maxi = a; } } maxi--; while(1){ sum = 0; for(int j = 1; j0) sum += temp; } if(sum>=M){ break; } maxi--; } cout > N >> M; f..

728x90
반응형