알고리즘 문제풀이 For Java - 3회차

스터디일지 : 2021-06-27 일요일

번호 링크 새리 시온 산희 케이
1 정수 제곱근 판별 O O O O O O
2 약수의 합 O X O O O O
3 제일 작은 수 제거하기 O O O O X O
4 정수 내림차순으로 배치하기 O O O X O O
5 자릿수 더하기 O O O X O O

스터디를 진행하며 풀리지 않는 의문점

// note : 왜 정렬이 끝가지 안될까..? 그것이 궁금하다..
public long solution(long n) {
        String ins = Long.toString(n);
        String[] arr = ins.split("");
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (1 - o1.compareTo(o2));
            }
        });
        StringBuilder builder = new StringBuilder();
        for(String t :  arr) {
            builder.append(t);
        }
        return Long.parseLong(builder.toString());
    }
 
  • 위 코드에서 정렬이 끝가지 안풀린다 >> Dong의 버그코드, 원인과 해결책을 찾으면 공유해주기

제출 코드(표에 표시된 순서로)

class Solution {
  public long solution(long n) {
      long answer = -1;
      double doubleSqrt = Math.sqrt(n);
      int intSqrt = (int)doubleSqrt;
      return intSqrt == doubleSqrt ? (long)Math.pow(intSqrt+1,2) : -1; 
  }
}
  • 케이의 파이썬 풀이
def solution(n):
    answer = 0
    if n==1:
        return 4
    for i in range(0,n,1):
        if i*i == n :
            i += 1
            return (i*i)
        elif i*i > n:
            return -1
        else:
            pass
            
    return answer


if __name__ == "__main__":
    print(solution(1))
class Solution {
   public int[] solution(int[] arr) {
        if (arr.length == 1) {
            return new int[]{-1};
        }

        int[] answer = new int[arr.length - 1];
        int mini = Integer.MAX_VALUE;
        for (int elem : arr) {
            mini = Math.min(elem, mini);
        }

        int idx = 0;
        for (int i = 0; i < arr.length; i++) {
            int elem = arr[i];
            if (elem == mini) {
                continue;
            }
            answer[idx] = arr[i];
            idx++;

        }
        return answer;
    }
}
  • 동의 cpp 풀이
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer;
    answer = arr;
    int len = answer.size();
    int min=65535, idx;
    if(len==1 || len==0 ) {
        answer.clear();
        answer.push_back(-1);
        return answer;
    }
    else {
        for(int i=0 ; i<len ; i++) {
            if(min>answer[i]) {
                idx=i;
                min=answer[i];
            }
        }
        
        answer.erase(answer.begin()+idx);
        return answer;    
    } 
    puts("error");   
    
}
import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public long solution(long n) {
        String ins = Long.toString(n);
        //String[] arr = ins.split("");
        char[] arr = ins.toCharArray();
        Arrays.sort(arr);
        /*
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //return (1 - o1.compareTo(o2));
                if( Integer.parseInt(o1) > Integer.parseInt(o2)) {
                    return 1;
                }
                return 0;
            }
        });
        */
        StringBuilder builder = new StringBuilder();
        for(int i=0 ; i<arr.length ; i++) {
            builder.append(arr[arr.length-(i+1)]);
        }
        return Long.parseLong(builder.toString());
    }
}
  • 연의 cpp 풀이
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool inv_aligne (char a, char b) {
    return a>b;
}

long long solution(long long n) {
    long long answer = 0;
    string s;
    
    //convert n -> s 
    s=to_string(n);
    
    //sorting
    sort(s.begin(), s.end(),inv_aligne);
    
    //conv s->n
    answer=stoll(s);
    
    return answer;
}
  • 자릿수 더하기 : 세리
import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        while (n!=0) {
            answer += n%10;
            n/=10;
        }
        return answer;
    }
}
  • 시온의 씨쁠쁠 풀이
#include <iostream>

using namespace std;
int solution(int n)
{
    int answer = 0,retemp=0;
    int i=0, j=0,nsize=0,ncpy=0;//10이하 nsize = 1,100이하 = nsize=2
    ncpy = n;
    for(nsize = 0; nsize<9 ; nsize++) {
        if(ncpy <10) {
            answer = ncpy+answer;
            break;
        }
        else {
            retemp=ncpy%10;
            answer = retemp+answer;
            ncpy=ncpy/10;
        }
    }
    
    
    
    return answer;
}

댓글을 작성해보세요.

채널톡 아이콘