티스토리 뷰

Algorithm/BOJ

백준 1247번 C++

poopooreum 2023. 7. 22. 16:19
반응형

백준 1247번 부호
https://www.acmicpc.net/problem/1247

1247번: 부호

총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 N(1 ≤ N ≤ 100,000)이 주어지고, 둘째 줄부터 N개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거

www.acmicpc.net



정답 코드

#include<stdio.h>
#define MAX 9223372036854775807 //오버플로우 최대 수
int of(long long *pr,long long s){ //양수 입력시
    int r=0;
    if(*pr>MAX-s) r=1,*pr=*pr-MAX+s; //최종 res값이 MAX보다 큰 경우 처리
    else *pr+=s;
    return r; //오버플로우 발생시 1, 아니면 0
}
int uf(long long *pr,long long s){ //음수 입력시
    int r=0;
    if(*pr<-MAX-s) r=-1,*pr=*pr+MAX+s; //최종 res값이 -MAX보다 작은 경우 처리
    else *pr+=s;
    return r; //언더플로우 발생시 -1, 아니면 0 반환
}
int main(){
    int t=3;
    while(t--){
        int n,r,c=0;
        long long s,res=0;
        scanf("%d",&n);
        while(n--) {
            scanf("%lld",&s);
            r=s>0?of(&res,s):uf(&res,s); //양수, 음수(0포함) 구분 후 해당 함수 실행
            c+=r;
        }
        if(res==MAX) c++,res=0; //res가 최종적으로 MAX값일 경우 예외처리
        if(res==-MAX) c--,res=0;
        char p;
        if(c>0) p='+'; //c에 따른 출력 부호 처리
        else if(c<0) p='-';
        else {
            if(res>0) p='+'; //res에 따른 출력 부호 처리
            else if(res<0) p='-';
            else p='0';
        }
        printf("%c\n",p);
    }
    return 0;
}


문제 풀이
자료형에 주의하셔셔 풀어야 합니다. 그리고 언더플로우, 오버플로우 발생 시 처리해주는 함수를 만들어야 합니다.

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 1259번 C++  (0) 2023.07.22
백준 1251번 C++  (0) 2023.07.22
백준 1212번 C++  (0) 2023.07.22
백준 1193번 C++  (0) 2023.07.22
백준 1182번 C++  (0) 2023.07.22
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함