코테 준비 30일차_10/15

Jieun·약 16시간 전

코딩테스트 준비

목록 보기
24/24
  1. 인기있는 아이스크림
  • 제출 정답
SELECT FLAVOR FROM FIRST_HALF ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
  1. 문자열 내림차순으로 배치하기
  • 접근 방법
    소문자와 대문자 나눠서 소문자부터 넣는데 내림차순해서 두면 될거같은데

  • 초기 정답

class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();
        if(s == UpperCase(s)) {
            answer.append(s);
            answer.desc();
        }
        else{
            anawer.append(s);
            answer.desc();
        }
        return answer.toString();
    }
}
  • 원인 분석
    내림차순 정렬 메서드가 따로 없어서 문자열을 문자 배열로 바꾼뒤에 정렬 기능을 사용해야함

  • 해결 방안

1) s.toCharArray()로 문자열을 char[] 배열로 쪼개기
2) Arrays.sort()로 오름차순 정렬하기
3) StringBuilder의 reverse 메서드 써서 내림차순으로 뒤집기

  • 최종 정답
import java.util.*;
class Solution {
    public String solution(String s) {
        char [] sol = s.toCharArray();
        Arrays.sort(sol);
        return new StringBuilder(new String(sol)).reverse.toString();
    }
}
  1. 소수 찾기
  • 접근 방식
    소수를 나열한다음 얘보다 작은값을 반환해야 되나 소수를 어떻게 구하지..

  • 해결방안
    단순 반복문으로는 시간 초과 발생해서 에라토스테네스의 체 알고리즘을 사용해야 함
    1) 크기가 n + 1인 boolean 배열을 만들고 전부 true로 채워줌
    2) 0과 1은 소수가 아니니까 false로 바꿔줌
    3) 2부터 시작해서 배수들의 해당하는 번호를 전부 false로 지움
    4) 마지막에 배열에서 true로 남아있는 개수 세면 끝

  • 정답 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        boolean [] isPrime = new boolean[n+1];
        
        for(int i = 2;i<=n;i++) {
            isPrime[i] = true;
        }
        
        for(int i=2;i*i<=n;i++) {
            if(isPrime[i]) {
                for(int j = i*i;j<=n;j+=i) {
                    isPrime[j] = false;
                }
            }
        }
        
        for(int i=2;i<=n;i++) {
            if(isPrime[i]) {
                answer++;
            }
        }
        
        return answer;
    }
}
profile
비전공자의 백엔드 생존기: 어제보다 1% 더 성장하기

0개의 댓글