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

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

정렬 알고리즘 문제

 

import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        String[] arr = new String[numbers.length];
        for(int i=0;i<numbers.length;i++){
            arr[i] = Integer.toString(numbers[i]);
        }
        Arrays.sort(arr, new Comparator<String>(){
           @Override
            public int compare(String str1, String str2){
                return (str2+str1).compareTo(str1+str2);
            }
        });
        
        if(arr[0].startsWith("0")){
            answer += "0";
        }else{
            for(String a : arr){
                answer += a;
            }
        }
        return answer;
    }
}

 

 

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

 

코딩테스트 연습 - 콜라츠 추측

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(int num) {
    int answer = 0;
    long long num1 = num;
    while (num1 != 1) {
        if (answer > 500) {
            return -1;
        }
        if (num1 % 2 == 0) {
            num1 = num1 / 2;
        } else {
            num1 = num1 * 3;
            num1++;
        }
        answer++;
    }
    return answer;
}

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

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

 

 

정렬 알고리즘

 

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        Arrays.sort(citations);
        for(int i=0;i<citations[citations.length-1];i++){
            answer = i;
            int cnt = 0;
            for(int j=0;j<citations.length;j++){
                if(answer < citations[j])
                    cnt++;
            }
            if(answer >= cnt)
                break;
            
        }
        return answer;
    }
}

 

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

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

 

 

string에 replace와 find함수를 사용했다.

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

int main(void) {
    vector<string> vString;
	string s;
	int n;
	vString.push_back("c=");
	vString.push_back("c-");
	vString.push_back("dz=");
	vString.push_back("d-");
	vString.push_back("lj");
	vString.push_back("nj");
	vString.push_back("s=");
	vString.push_back("z=");

	cin >> s;
	for (int i = 0; i < vString.size(); i++) {
		while (1) {
			n = s.find(vString[i]);
			if (n == string::npos) {
				break;
			}
			s.replace(n, vString[i].length(), "#");
		}
	}
	cout << s.length();
    
    return 0;
}

 

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

 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr

 

탐욕법 알고리즘 사용

 

class Solution {
    public String solution(String number, int k) {
        StringBuilder answer = new StringBuilder(number);
        int delCnt = 0;
        int index = 1;
        while(delCnt != k){
            if(index>=1 && answer.charAt(index-1) < answer.charAt(index)){
                answer.deleteCharAt(index-1);
                index--;
                delCnt++;
            }else{
                if(index == answer.length() - 1 && answer.charAt(index-1) >= answer.charAt(index)){
                    answer.deleteCharAt(index);
                    delCnt++;
                    index--;
                }else
                    index++;
            }
        }
        return answer.toString();
    }
}

+ Recent posts