출처 : https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

www.acmicpc.net

 

map STL을 이용해 숫자 개수를 체크해줬는데 너무 많은 라이브러리를 사용해 푼 것 같다.

다음번엔 배열만 사용해서 풀어보도록 하겠다.

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
using namespace std;

int main(void) {
	int numCount;
	int nA;
	int nB;
	int nC;
    
	cin >> nA >> nB >> nC;
	numCount = nA * nB * nC;
	string sNum = to_string(numCount);
	map<int, int> mCount;
	for (auto it : sNum) {
		mCount[it] += 1;
	}

	for (int i = 48; i < 58; i++) {
		auto it = mCount.find(i);
		if (it == mCount.end()) {
			cout << 0 << endl;
		}
		else {
			cout << mCount[i] << endl;
		}
	}
    return 0;
}

 

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/1845#

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

 

 

hash map을 이용해 종류개수를 구하는 것이 핵심이다.

 

#include <vector>
#include <map>
using namespace std;

int solution(vector<int> nums)
{
    int nSize = nums.size() / 2;
    map<int, int> mapping;
    
    for (auto it : nums) {
        mapping[it] += 1;
    }
    
    return nSize > mapping.size() ? mapping.size() : nSize;
        
}

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/12915?language=cpp 

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱

programmers.co.kr

 

algorithm 라이브러리에 sort 함수 사용해서 sort에 기준이되는 함수를 작성했다.

 

#include <string>
#include <algorithm>
#include <vector>

using namespace std;
int gn;

bool cmp(const string &a, const string &b) {
    return a[gn] == b[gn] ? a < b : a[gn] < b[gn];
}

vector<string> solution(vector<string> str, int n) {
    gn = n;
    sort(str.begin(), str.end(), cmp);
    return str;
}

 

https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

스택/큐 문제이다.

그냥 흘러가는데로 풀어서 좋은 코드인지는 모르겠다.

나중에 다시 수정해봐야지

import java.util.*;
class Solution {
  public int[] solution(int[] progresses, int[] speeds) {
    int[] cnt = new int[progresses.length];
    for (int i = 0; i < progresses.length; i++) {
      int pro = progresses[i];
      while (pro < 100) {
        pro += speeds[i];
        cnt[i]++;
      }
    }

    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(1);
    int start = 0;
    for (int i = 1; i < cnt.length; i++) {
      if (cnt[start] >= cnt[i]) {
        list.set(list.size() - 1, list.get(list.size() - 1) + 1);
      } else {
        list.add(1);
        start = i;
      }
    }
    int[] answer = new int[list.size()];
    for (int i = 0; i < list.size(); i++) {
      answer[i] = list.get(i);
    }
    return answer;
  }
}

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

 

2중 for문으로 완전탐색 개념을 사용했다.

같은 인덱스끼리는 계산하지 않고 다른 인덱스의 값이 answer 벡터에 들어있으면 추가하지 않는다.

마지막으로 문제에서 요구한 대로 오름차순정렬

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    for (int i = 0; i < numbers.size(); i++) {
        for (int j = 0; j < numbers.size(); j++) {
            if (i != j) {
                int nTemp = numbers[i] + numbers[j];
                auto it = find(answer.begin(), answer.end(), nTemp);
                if (it == answer.end()){
                    answer.push_back(nTemp);
                }
            }
        }
    }
    sort(answer.begin(), answer.end());
    return answer;
}

 

 

+ Recent posts