알고리즘 문제풀이 For Java - 3회차
2021.06.27
스터디일지 : 2021-06-27 일요일
- 이번주 주제 : 해시
- 참석인원 : 동, 연, 새리, 시온, 히로 ,케이( 6명)
- 진행시간 : 10시~13시(3시간)
- 프로그래머스 고득점 키트
번호 | 링크 | 동 | 연 | 새리 | 시온 | 산희 | 케이 |
---|---|---|---|---|---|---|---|
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;
}
댓글을 작성해보세요.