본문 바로가기
알고리즘

[Algorithm] 6월1일 알고리즘 연습 (프로그래머스 2단계)

by eigen96 2022. 6. 2.
728x90

 

Lv. 2 멀쩡한 사각형 - 실패

참고할 풀이:

https://velog.io/@ajufresh/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%A9%80%EC%A9%A1%ED%95%9C-%EC%82%AC%EA%B0%81%ED%98%95-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-Java

 

[프로그래머스] 멀쩡한 사각형 문제풀이 (Java)

프로그래머스 멀쩡한 사각형 문제풀이

velog.io

 

내풀이

class Solution {
    public long solution(int w, int h) {
        long answer = 1;
        //전체 칸수
        long totalBox = w*h;
        long deletedBox = 0;
        int tempW =0;
        int tempH =0;
        
        for(int i = Math.min(w,h); i > 1; i--){
            if(w%i == 0 && h%i ==0){//둘다 약분이 되는 경우
                tempW = w/i;
                tempH = h/i;
                break;
            }
        }
        
        //깔끔하게 나누어지는 경우
        // 같을 때
        if(h%w == 0 && h == w){
            deletedBox = h ;   
        }//나누어 지지만 h가 클 때
        else if(h%w ==0 && h>w){
            deletedBox = (h/w)*w;
        }//나누어지지 않는 경우 h가 더 클때
        else if(h%w !=0 && h>w){
            deletedBox = ((tempH%tempW)+1) * w;
        }
        else if(w % h ==0 && w >= h){
            deletedBox = w;
        }
        else if(w % h !=0 && w > h){
            deletedBox = ((tempW%tempH)+1)*h;
        }
        answer = totalBox - deletedBox;
        return answer;
    }
}

내 풀이 정확도 : 38%

테스트 1 〉 통과 (0.05ms, 74.3MB)
테스트 2 〉 실패 (런타임 에러)
테스트 3 〉 실패 (0.11ms, 71MB)
테스트 4 〉 실패 (0.11ms, 72.4MB)
테스트 5 〉 실패 (0.14ms, 70.9MB)
테스트 6 〉 실패 (0.21ms, 71.7MB)
테스트 7 〉 통과 (0.05ms, 76.9MB)
테스트 8 〉 통과 (0.07ms, 73.8MB)
테스트 9 〉 통과 (0.08ms, 72.9MB)
테스트 10 〉 통과 (0.05ms, 73.7MB)
테스트 11 〉 통과 (0.10ms, 71.7MB)
테스트 12 〉 실패 (0.06ms, 75.2MB)
테스트 13 〉 실패 (29.27ms, 82.1MB)
테스트 14 〉 실패 (0.08ms, 75.3MB)
테스트 15 〉 실패 (런타임 에러)
테스트 16 〉 실패 (런타임 에러)
테스트 17 〉 실패 (20.98ms, 76MB)
테스트 18 〉 통과 (0.07ms, 84.2MB)

 

Lv. 2 124 나라의 숫자 - 실패

복습 필요한 내용 :

3진법 만들기

charAt()으로 char -> int로 받는 방법

char c = '1';
int n = c - '0';
// n = 1

 

참고한 풀이

 

class Solution {
  public String solution(int n) {
      String answer = "";
      
      while(n > 0){
          int rest = n % 3;
          n /= 3;
          if(rest == 0){
              rest = 4;
              n -= 1; // 나누어 떨어졌으니까 
          }
          answer = rest + answer;
      }
      
      return answer;
  }
}

https://swycha.tistory.com/114

 

[프로그래머스] 124 나라의 숫자(java) ⭐️

[문제] 문제 설명 124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2

swycha.tistory.com

 

내풀이 - 정확성: 35.0

import java.util.*;
import java.io.*;

class Solution {
    
    StringBuilder sb = new StringBuilder();
    
    public String solution(int n) {
        String answer = "";
        
        ArrayList<Integer> arr = new ArrayList<Integer>();
        
        //3진법으로 변환
        while(n > 0){
            //역순으로 3진법을 나열(다시 역순으로 나열할 필요있음.)
            arr.add(n%3);
            n = n/3;
            
        }
        
        for(int i =  arr.size()-1 ; i >= 0 ; i--){
            sb.append(arr.get(i));
        }
        //3진법 결과
        String thirdNum = sb.toString();
        sb.setLength(0); //Builder 초기화
        
        //3진법 숫자들을 각각 배열에 담음.
        int[] thirdInt = new int[thirdNum.length()];
        for(int i = 0; i < thirdNum.length(); i++){
            thirdInt[i] = thirdNum.charAt(i) -'0';
        }
        //3진법 -> 124진법 변환
        //[2,0] -> 14
        int delta = 0;
        int prev = 0;
        for(int i = thirdNum.length()-1; i >=0 ; i--){
            if(thirdInt[i] == 0) {
                if(delta == 1){
                    thirdInt[i] = 0 + delta;
                    prev = 0 + delta;
                }else{
                    thirdInt[i] = 4;
                    prev = 4;
                }
                
                delta = 1;
            }
            else if(thirdInt[i] == 1){
                
                thirdInt[i] = 1 - delta;
                prev = 1 - delta;
                delta = 0;
                
            }else if(thirdInt[i] == 2){
                thirdInt[i] = 2 - delta;
                prev = 2 - delta;
                delta = 0;
            }
        }
        //변환된 진법 출력
        //[0,1,4] 
        boolean isNumber = false;
        for(int i = 0 ; i < thirdInt.length ; i++){
            if(thirdInt[i] != 0){
                isNumber= true;
            }
            if(isNumber){
                sb.append(thirdInt[i]);
            }
        }
        answer = sb.toString();
        return answer;
    }
}

 

 

 

728x90

댓글