본문 바로가기
알고리즘

[Algorithm] 5월29일 알고리즘 연습

by eigen96 2022. 5. 29.
728x90

Lv. 1 부족한 금액 계산하기 - 성공( 난이도 : 매우 쉬움)

class Solution {
    public long solution(int price, int money, int count) {
        long answer = 0;
        
        long total = 0;
        for(int i = 1; i <= count ; i++){
            total = total + price * i;
        }
        //가진돈이 충분하다면
        if(money > total){
            return 0;
            
        }else {
            //부족하다면
            return total - money;
        }
        
        

        
    }
}

 

 

Lv. 1 가운데 글자 가져오기 - 성공 (난이도 : 매우 쉬움)

복습할 내용 : subString?

class Solution {
    public String solution(String s) {
        String answer = "";
        
        char[] arr = s.toCharArray();
        //전체 길이가 홀수라면
        if((arr.length)%2 == 1){
            answer = ""+ arr[(arr.length)/2];
        }else{
            //짝수라면
            answer = ""+arr[(arr.length)/2 -1] + ""+arr[(arr.length)/2];
        }
        
        return answer;
        
    }
}

 

 

Lv. 1 같은 숫자는 싫어 - 성공 (실수 :  중복되는 숫자 모두 삭제하는 것으로 착각.)

한도초과 나온 풀이

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        
        ArrayList<Integer> answerList = new ArrayList<Integer>();
        
        int L = 0;
        int R = 0;
        while(L < arr.length){
            while(arr[L] == arr[R] && R < arr.length - 1){
                R++;
            }
            L = R;
            answerList.add(arr[R-1]);
        }
        for(int i = 0 ; i < answerList.size(); i++){
            answer[i] = answerList.get(i);
        }

        return answer;
    }
    
    
}

 

고친 풀이

 

 

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        
        ArrayList<Integer> answerList = new ArrayList<Integer>();
        int previous = 11;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] != previous){
                //이전 숫자와 다르면 추가.
                previous = arr[i];
                answerList.add(arr[i]);
                
            }
        }
        answer = new int[answerList.size()];
        for(int i = 0; i < answerList.size(); i++){
            answer[i] = answerList.get(i);
        }

        return answer;
    }
    
    
}

 

Lv. 1 나누어 떨어지는 숫자 배열 - 성공 (난이도 : 매우쉬움)

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

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {}; //크기 초기화 필요함.
        ArrayList <Integer> answerList = new ArrayList<Integer>();
        
        for(int i = 0; i < arr.length ; i++){
            if(arr[i] % divisor == 0){
                answerList.add(arr[i]);
            }
        }
        if(answerList.size() == 0){
            answerList.add(-1);
        }
        
        
        answer = new int[answerList.size()];
        for(int i = 0 ; i < answerList.size(); i++){
            answer[i] = answerList.get(i);
        }
        Arrays.sort(answer);
        
        
        return answer;
    }
}

 

 

Lv. 1 두 정수 사이의 합 - 성공 (난이도 : 매우 쉬움)

class Solution {
    public long solution(int a, int b) {
        int c = 0;
        int d = 0;
        if( a >= b){
            c = b;
            d = a;
        }else{
            c = a;
            d = b;
        }
        
        long answer = 0;
        for(int i = c; i <= d ; i++){
            answer = answer + i;
        }
        
        return answer;
    }
}

 

 

 

Lv. 1 문자열 내 마음대로 정렬하기 - 실패

복습할 내용 : 사전순으로 나열하기 

 

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

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱

programmers.co.kr

참고한 코드:

https://velog.io/@dkfma3323/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%82%B4-%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0-Java

 

[프로그래머스]문자열 내 마음대로 정렬하기 (Java)

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 "sun", "bed", "car"이고 n이 1이면 각 단어의 인덱

velog.io

 

 

Lv. 1 문자열 내 p와 y의 개수 - 성공( 난이도 : 매우쉬움)

 

class Solution {
    boolean solution(String s) {
        boolean answer = true;

        char[] arr = s.toCharArray();
        int pumber = 0;
        int yumber = 0;
        
        for(char a : arr){
            if(a == 'p' || a == 'P'){
                pumber++;
            }else if(a == 'y' || a == 'Y'){
                yumber++;
            }
        }
        
        if(pumber == yumber){
            return true;
        }else{
            return false;
        }
        
        

        
    }
}

 

 

 

Lv. 1 문자열 내림차순으로 배치하기 - 성공 

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

class Solution {
    
    static StringBuilder sb = new StringBuilder();
    
    public String solution(String s) {
        String answer = "";
        char[] arr = s.toCharArray();
        Arrays.sort(arr);
        for(int i = arr.length -1; i >=0 ; i--){
            sb.append(arr[i]);
        }
        answer = sb.toString();
        return answer;
        
        
    }
}

 

 

 

 

 

 

Lv. 1 문자열 다루기 기본 - 실패

복습 내용: char취급을 안 해준 게 문제

s.charAt(i) < '0' || s.charAt(i) > '9'

 

 

https://velog.io/@dhk22/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0-%EA%B8%B0%EB%B3%B8-JAVA

 

[프로그래머스] - 문자열 다루기 기본 JAVA

프로그래머스 문자열 다루기 기본 JAVA

velog.io

 

 

Lv. 1 서울에서 김서방 찾기 - 성공 (실수 주의)

복습내용 : String은 객체이기 때문에 비교할 때 ==연산자는 false만 나옴. -> equals()사용.

 

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

class Solution {
    public String solution(String[] seoul) {
        String answer = "";
        boolean isKim = false;
        int dex = 0;
        int answerIndex = 0;
        for(String person : seoul){
            if(person.equals("Kim")){
               
                answerIndex = dex;
            
                isKim = true;
                break;
            }
            dex++;
        }
        if(isKim){
            answer = "김서방은 " + answerIndex + "에 있다";
        }
        
        
        return answer;
    }
}

 

 

 

 

Lv. 1 소수 찾기 - 실패( 소수관련 문제 취약)

소수 찾는 것 실수 주의 (함수 조건을 반대로 설정하는 실수 )

실패한 풀이(효율성 탈락)

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

 

코딩테스트 연습 - 소수 찾기

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상

programmers.co.kr

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i = 2; i <= n ; i++){
            if(!isNotSosu(i)){
                answer++;
            }
        }
        
        
        
        return answer;
    }
    
    public boolean isNotSosu(int n){
        if( n == 2) return false;
        if( n == 3) return false;
        for(int i = 2; i < n ; i++){
            if(n % i == 0){
                return true;
            }
        }
        return false;
    }
}

 

참고 코드

class Solution {
  public int solution(int n) {
      int answer = 0;
      boolean[] sosu =new boolean [n+1];
      
      for(int i=2; i<=n ; i++)
          sosu[i]=true; //2~n번째수를 true로 초기화
      
      //제곱근 구하기    
      int root=(int)Math.sqrt(n);
      
     for(int i=2; i<=root; i++){ //2~루트n까지 검사
         if(sosu[i]==true){ //i번째의 수가 소수일 때
             for(int j=i; i*j<=n; j++) //그 배수들을 다 false로 초기화(배수는 소수가 아니기 때문)
                    sosu[i*j]=false;
         }      
     }
      for(int i =2; i<=n; i++)  { 
          if(sosu[i]==true) //소수의 개수 세기
          answer++;
      }
      return answer;
  }
}
출처: https://wooaoe.tistory.com/50 [개발개발 울었다:티스토리]

https://wooaoe.tistory.com/50

 

[프로그래머스] JAVA 소수 찾기 Level 1

💡 나의 풀이(효율성에서 시간복잡도 큼) class Solution { public int solution(int n) { int answer = 0; for(int i = 2; i <= n; i++){ boolean chk = true; for(int j = 2; j*j <= i; j++){ //배수 지우기 if..

wooaoe.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글