10/29 Daily Report

less than 1 minute read

10/29 Daily Report

TIL(Today I Learn)

● 백준 1929 - 소수 구하기 문제 해결

시간 초과만 3번에 런타임 에러도 뜨고 오늘 하루 동안 붙잡고 겨우 해결했다.

#include <iostream>
#include <cmath>
#define MAX 1000001

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  int m, n;
  bool visited[MAX] = {0};

  cin >> m >> n;
  for(int i=m; i<=n; i++){
    visited[i] = true;
  }
  visited[1]=false;
  for(int i=2; i<=sqrt(n); i++){
    for(int j=i*i; j<=n; j+=i){
      visited[j]=false;
    }
  }
  for(int i=m; i<=n; i++){
    if(visited[i]==true){
      cout << i << "\n";
    }
  }
} 

이게 해결한 코드인데 처음에는 재귀로 풀려고 시도했엇고 안되서 코드를 다시 짜고 작동은 하는데 시간 초과 떠서 다시 짜고…
그렇게 고생한 끝에 나온 결과물이다.

추가적으로 다른 사람의 풀이를 보면서 알게된 함수가 있는데 fill과 fill_n이 그것이다.
● std::fill_n fill_n(변경하려는 원소의 범위 시작주소, 변경하려는 원소 갯수, 변경값) ex) fill_n(arr[0],3,2), fill_n(arr[0]+1,5,2) ● std::fill fill(변경하려는 원소의 범위 시작주소, 변경하려는 원소의 범위 종료주소, 변경 값) 시작주소 <= 변경 값 < 종료주소 만큼 변경 ex) fill(arr[0],arr[0]+3,2)

Leave a comment