1/19 알고리즘

최윤서·2025년 1월 19일


BOJ 2577 숫자의 개수

#include <iostream>
using namespace std;

int A, B, C, N;
int mult;
int arr [10] = {0};

int main() {
    
    cin >> A >> B >>  C;
    mult = A*B*C; //1702
    
   while(mult>0){
        N = mult%10; // 2
        arr[N] ++; //2를 나타내는 부ㄴ +1 
        mult = mult/10; //170
    }

    for (int i = 0 ; i<10 ; i++){
        cout << arr[i] << '\n';
    }

    return 0;
}

BOJ 1475 방 번호

  • 6을 9로 같이 카운팅한다는 접근 좋았으나, 반으로 나눌 때 소숫점 고려하지 않아서 틀림.
  • if문에서 m==9일 때 m==6 하면 그건 연산이기 때문에 m=6으로 초기화 해야 함.
  • 최댓값 계산법: max를 써서 그 배열에서 가장 큰 값을 m에 저장.
  • 이 때 6과 9는 나와도 취급하지 않음. 그냥 넘어가고 6, 9의 합/2를 올림한 결과와 다른 단일 숫자들의 최댓값을 비교.
  for(int i = 0; i < 10; i++){
    if(i == 6 || i == 9) continue;
    ans = max(ans, a[i]);
  }
  // (a[6]+a[9])/2를 올림한 값이 6, 9에 대한 필요한 세트의 수이므로 (a[6]+a[9]+1)/2을 계산
#include <iostream>
using namespace std;

int n, m, max;
int arr [9] = {0}; //0~8

int main () {
    int max = 0;
    cin >> n;
    while (n>0){
        m = n%10;
        if(m==9){m=6;}
        arr[m]++;//9를 6에 같이 카운팅
        n = n/10;
    }

    if (arr[6]%2==0){
      arr[6] = arr[6]/2;
    }else arr[6] = arr[6]/2+1;
    
    max= 0;
    for (int i = 0 ; i<10 ; i++){
        if(arr[i]>max){
            max = arr[i]; //제일 큰 것 갱신
        }
    }//제일 많이 필요한 숫자 찾아내기 
    //만약 제일 많이 필요한 숫자가 6이나 9라면 그것의 절반만 필요함. 근데 6이 4개 필요한데 3이 3개 필요하다면?
    
    cout << max;

}

//전체 세트 갯수 = 같은 숫자의 최대 중복 수 , 그러나 중복되는 게 6이나 9일 경우 둘은 상쇄 가능하다. 한 세트에 6/9가 2개씩 들어있다.
// 1111 > 4개
// 1234 > 1개
// 1552 > 2개
// 1996 > 2개
//1995 > 1개
// 9999 > 2개
profile
일 잘 하고싶은 기개디자이너

0개의 댓글