SELECT FLAVOR FROM FIRST_HALF ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
접근 방법
소문자와 대문자 나눠서 소문자부터 넣는데 내림차순해서 두면 될거같은데
초기 정답
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) 크기가 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;
}
}