나는 그냥 개미의 개체 수를 구하고 싶을 뿐인데 테스트 문제를 통과하지 못하고 있다. 엉엉
public int solution(int hp) {
int gen;
int sold;
int work;
int answer = 0;
for (gen = 1; gen < hp ; gen++){
for (sold = 0; sold < gen ; sold++){
for (work = 0; work < sold ; work++) {
if(hp / (5*gen + 3*sold + work) == 1) {
answer = gen + sold + work;
}
}
}
}
return answer;
}
테스트를 해봤더니, 2와 3은 통과하는데 테스트 1이 자꾸 틀린다.
아무리 생각해도 원인을 모르겠어서 챌린지 분들께 여쭤보았더니 for문의 위치가 문제라고.
-> for문은 안쪽에서부터 돌기 때문에, 가장 먼저 증가시키고 싶은 애를 안쪽 for문에 놓는게 좋다.
-> 그런데 이거 for문의 위치를 바꾸니 아예 돌아가지 않는다.
그리고 무엇보다 이 방법은 사실 시간복잡도가 너무 높아 권장하지 않는다.
다른 분들은 보통 hp%5를 다시 hp에 넣고, 그 hp로 hp%3 연산을 수행하여 다시 hp에 넣어서 answer에 += 하는 식으로 답을 내셨다.
다른 분들의 깔끔한 풀이.
String my_string = "asd4b37o1bo7bk4";
my_string = my_string.replaceAll("^[0-9]", "");
System.out.println(my_string);
이거 숫자 아닌게 아무리 해도 안 지워져요!!
-> ^[0-9] 아니고 [^0-9] 으로 써야된다. 대체 뭘 한거냐.
-> Math.pow(int 밑이 될 수, int 거듭제곱 수); 를 사용하거나, 밑이 될 수 n *= 2 하는 식으로 푸는게 일반적이다.
public int solution(int n, int t) {
int answer = 0;
answer = n << t;
return answer;
}
세균번식 문제를 이렇게 푼 사람들이 있었다. 나는 이름밖에 기억 안 나는데. 천잰가?
비트 연산자를 이용한 2^n 표시에 대한 글
n << i 라는 말은, n 숫자의 비트를 좌측으로 i 만큼 이동시킨다.
여기서 좌측으로 한번씩 이동 할 때마다 비트 특성 상 2의 i 승씩 만큼 증가 한다.
즉, n << i 의 좌측 쉬프트 연산은 산술적으로 n * 2^( i ) 과 같다.