728x90

import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Stream;

public class StringtoInt {
public static void main(String[] args) {

/*
 * 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문
 * 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
 * 
 * 제한 사항 str은 길이 1 이상인 문자열입니다.
 */

String s = "Zbcdefg";

//String 변수안에 담긴 문자열들을 .split()을 통해 한글자씩 배열로 분리
String[] str = s.split("");


//오름차순 정렬 Arrays.sort(str);
Collections.reverse(Arrays.asList(str));

//join 메서드를통해 배열안의 요소를 스트링으로 합치기 String.join("", str);
String b = String.join("", str);

System.out.println(b);
    }
}

728x90

'알고리즘' 카테고리의 다른 글

[프로그래머스] 두 개 뽑아서 더하기  (0) 2022.02.11
[프로그래머스] 체육복  (0) 2022.02.08
728x90

풀이 과정 

 

이 문제의 핵심은 순서가 없고 데이터 중복이 허용이안되는 자바의 컬렉션 프레임워크의 "Set"이 핵심인거 같다.

 

우선 HashSet을 만든다음 2중 반복문 형태에서 

 

서로 다른 인덱스에 있는 두개의 수를 뽑아야했으므로 i를 제외한 나머지 j 반복자를 더한 값을

HashSet에 담았고

Set을 ArrayList에 담아 Collections.sort() 메서드를 통해 오름차순으로 정렬한뒤

 

다시 ArrayList를 Answer(정수형 배열) 에 담았는데 한번에 통과하였다.

 

 

 

 

 

풀이 코드

 

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        //배열의 임의 두수를 더해서 담을 정수 addnumber
        int addnumber = 0;
        
        
Set<Integer> setnumber = new HashSet<>();

for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < numbers.length; j++) {
if (i == j) {

} else {
addnumber = numbers[i] + numbers[j];

setnumber.add(addnumber);
}
}
}
        
        
  List<Integer> arraylist = new ArrayList<Integer>(setnumber);

  
  
  Collections.sort(arraylist);


  int[] answer = new int[arraylist.size()];
  int size=0;
  for(int temp : arraylist) {
  answer[size++] = temp;
  }
  
  for(int i=0; i<answer.length; i++) {
  System.out.println(answer[i]);
  }
 
        
        
        
        return answer;
    }
}

728x90

'알고리즘' 카테고리의 다른 글

[프로그래머스] Java 문자열 내림차순 배치하기  (0) 2022.05.31
[프로그래머스] 체육복  (0) 2022.02.08
728x90

 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
       

       // 체육복을 하나 더 가져왔는데 누가 훔쳐간애 처리
        for(int i=0; i< reserve.length; i++) {
    
                for(int j=0; j< lost.length; j++)
                    if(reserve[i] == lost[j]) {
                        reserve[i] = 0;
                    }
        }
         


        int ok_give = 0; //체육복을 빌려줄수있는 학생 수
        int duplicate = 0; // 중복 처리
        
        // 잃어버린 학생의 수
        int lost_length = lost.length;
        
        // 여벌 체육복이 있는 학생의 수
        int reserve_length = reserve.length;

        for(int i=0; i<reserve.length; i++) {
            duplicate=0;
            int reserve_plus = reserve[i]+1;
            int reserve_minus = reserve[i]-1;
                    
            for(int j=0; j<lost.length; j++){
                int lost_index = lost[j];
                
                if(lost_index == reserve_plus) {
                    ok_give++;
                    duplicate++;
                }
                
                if(lost_index == reserve_minus) {
                    ok_give++;
                    duplicate++;
                }
                
                if(duplicate == 2){
                    ok_give--;
                }
                
                }
        }
  
 int answer = 0;
 int ok = 0;
  if(lost.length < ok_give) {
      ok = ok_give - lost.length; 
      answer = n-lost.length+ok_give-ok;  

      // 전체 학생수 - 잃어버린 학생의 수 + 여벌의 체육복을 가져와서 빌려줄수있는 학생의 수 + 중복 제거
  }else{
      answer = n-lost.length+ok_give;

    // 전체 학생수 - 잃어버린 학생의 수 + 여벌의 체육복을 가져와서 빌려줄수있는 학생의 수
  }
            
        return answer;
    }
}

 

코드실행은 성공했으나

체점을 하니 65점이나왔다.

 

도중에 테스트케이스를 뭘 놓친건지.. 

 

 

테스트케이스를 추가해서 다시 풀어봐야겠다..

 

다른 사람의 풀이법

 

import java.util.Arrays;

class Solution {

public int solution(int n, int[] lost, int[] reserve) {

  int answer = n - lost.length; Arrays.sort(lost); Arrays.sort(reserve); // 여벌 체육복을 가져온 학생이 도난당한 경우        for(int i=0; i<lost.length; i++) {

    for(int j=0; j<reserve.length; j++) {

        if(lost[i] == reserve[j]){ answer++; lost[i] = -1; reserve[j] = -1; break;

         }

      }

}

 

// 도난당한 학생에게 체육복 빌려주는 경우

for(int i=0; i<lost.length; i++) {

   for(int j=0; j<reserve.length; j++) {

       if((lost[i]-1 == reserve[j]) || (lost[i]+1 == reserve[j])){ answer++; reserve[j] = -1; break;

       }

         }

           }

   return answer;

  } 

}

 

728x90

+ Recent posts