

내 풀이 1 : 메모리 초과
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 창문이 열려있으면 닫고, 닫혀있으면 열기
//
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int num = sc.nextInt();
int [] arr = new int [num+1];
int count = 0;
for (int i = 1; i <= num; i++) {
for (int j = i; j <= num; j+=i) {
if (arr[j] == 0){
arr[j] = 1;
}else{
arr[j] = 0;
}
}
}
for (int i = 1; i <= num; i++) {
if (arr[i] == 1){
count++;
}
}
sb.append(count);
System.out.println(sb.toString());
}
}
내 풀이 2 :
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 창문이 열려있으면 닫고, 닫혀있으면 열기
// num = 3 // 1 0 0
// num = 4 // 1 0 0 1
// num = 5 // 1 0 0 1 0
// num = 6 // 1 0 0 1 0 0
// 이렇듯, n에 루트씌운 수만큼 1이 나오는 것을 확인할수 있다.
// 그냥 다른 설계 다 필요없고, 입력받은 num에 루트씌워서 int로 출력
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int num = sc.nextInt();
int count = 0;
count = (int)Math.sqrt(num);
sb.append(count);
System.out.println(sb.toString());
}
}
느낀점
이 문제는.. 뭐 for문 안에 for문을 넣고 조건을 쓰고 그런게 아니고
그냥 공식을 찾으면 됐다.
창문이 3개일 땐 100
창문이 4개일 땐 1001
창문이 5개일 땐 10010
창문이 6개일 땐 100100
이렇듯 창문의 갯수에 루트 씌운 숫자만큼 열려있는 걸 확인할 수 있었다.
그냥 그래서 루트씌우고 int로 변환해서 출력하니까
개멋진 숏코딩을 해서 뿌듯했는데 누가 4ms만에 풀었더라
뭐지 이사람은??
아무튼 잘 풀었다 다신 보지말자 약수,소수와 배수야