💻STUDY/BOJ

[BOJ] Bronze V 부수기: 열번째 날

coldNoodlePigeon 2022. 1. 5.
  • 코딩 초보. 효율적인 코드 구현이 아닐 수 있습니다. 
  • 구현언어: Python , C99 
  • 푼 문제:  15740,15894,15962,15964,16170 
  • 못 푼 문제: 0개


15740. A+B-9

두 정수 A B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

1.C99

#include <stdio.h>
#include <string.h>

int max (int a, int b) { return a > b ? a : b; }

char aa[10002], bb[10002], cc[10012], *a = aa, *b = bb, *c = cc;
int A[10002], B[10002], C[10011];

int main (void) {

	int am = 0, bm = 0, cm = 0, i, al, bl, cl;
	
	scanf ("%s %s", a, b);
	
	if (*a == '-') { am++; a++; }
	if (*b == '-') { bm++; b++; }
	
	al = strlen (a);
	bl = strlen (b);
	
	if (am != bm) {

		if (al == bl) i = strcmp (a, b);
		else i = al - bl;
		
		if (i < 0) {
			
			for (i = 0; i < bl; i++) A[bl - i - 1] = b[i] - '0';
			for (i = 0; i < al; i++) B[al - i - 1] = a[i] - '0';
			
			cl = al; al = bl; bl = cl;
			cm = bm;
		}
		else if (i > 0) {
			
			for (i = 0; i < al; i++) A[al - i - 1] = a[i] - '0';
			for (i = 0; i < bl; i++) B[bl - i - 1] = b[i] - '0';
			
			cm = am;
		}
		else {
			
			puts ("0");
			return 0;
		}
		
		cl = max (al, bl) + 1;
		
		if (cm) { *c = '-'; c++; }
		
		for (i = 0; i < cl; i++) {
			
			C[i] += A[i] - B[i];
			if (C[i] < 0) { C[i] += 10; C[i + 1]--; }
		}
	}
	else {
		
		for (i = 0; i < al; i++) A[al - i - 1] = a[i] - '0';
		for (i = 0; i < bl; i++) B[bl - i - 1] = b[i] - '0';
		
		cl = max (al, bl) + 1;
		
		if (am) { *c = '-'; c++; }
		
		for (i = 0; i < cl; i++) {
			
			C[i] += A[i] + B[i];
			C[i + 1] += C[i] / 10;
			C[i] %= 10;
		}
	}

	while (cl > 1 && C[cl - 1] == 0) cl--;

	for (i = 0; i < cl; i++) c[i] = C[cl - i - 1] + '0';

	puts (cc);
	return 0;
}

100점 짜리 코드는 C99로 어떻게 구현해야할지 몰라서 movie_jo님의 100점짜리 코드를..가져왔다. 이해해서 참고만 하고 넘어가기로 했다. 확실히 코테에서 파이썬이 유리한 이유를 잘 알 것 같다. 파이썬은 아래와 같이 짧게 쉽게 구현이 가능하지만 c언어로는 코드가 거의 100줄에 다다르니... 

 

2. Python

a,b=map(int,input().split())
print(a+b)

다시 보니 선녀같은 파이썬 코드. 


15894. 수학은 체육과목입니다. 

가장 아랫부분의 정사각형 개수가 주어지면 그에 해당하는 답을 출력하는 프로그램을 만들어 형석이를 도와주자! 

 

1.C99

#include <stdio.h>

main() {
    long long n;
    scanf("%lld", &n);
    printf("%lld",n*4); 
}

처음에 n을 int로 선언해줬는데 틀렸습니다가 떠서 응..? 4n이 아닌가? 하고 계속 보고 있었는데 오버플로우 문제였다. 타입을 long long으로 선언해주면 10^9 까지 연산이 가능하다! (중요: scanf와 printf에서 포맷은 %lld로 받을것.) 

 

2.Python

n=int(input())
print(n*4)

15962. 새로운 시작

 

1.Python

print("파이팅!!")

단순 출력 문제. 


15964. 이상한 기호 

부산일과학고등학교의 효진이는 수학의 귀재이다. 어떤 문제라도 보면 1분 내에 풀어버린다는 학교의 전설이 내려올 정도였는데, 이런 킹ㅡ갓 효진에게도 고민이 생겼다. 대부분의 문제에서 반복되는 연산이 있었기 때문이다! 이 연산은 너무 길어서 종이에 풀던 효진이는 너무 고통스러워서, 자신이 새로 연산자를 만들기로 했다.

연산자의 기호는 @으로, A@B = (A+B)×(A-B)으로 정의내리기로 했다.

하지만, 효진이는 막상 큰 숫자가 들어오자 계산하기 너무 귀찮아졌다.

효진이를 도와 정수 A, B가 주어지면 A@B를 계산하는 프로그램을 만들어주자!

 

1.C99

#include <stdio.h>

main() {
    long a, b;
    scanf("%ld %ld", &a, &b); 
    printf("%ld", (a + b) * (a - b)); 
}

처음에 int로 선언했다가 30점이 뜨길래 이번에도 타입을 long으로 바꾸었는데 잘 돌아간다! 마찬가지로 포맷은 %ld로 받는 것 주의하기! 

 

2.Python

a,b=map(int,input().split())
print((a+b)*(a-b))

16170. 오늘의 날짜는? 

2018 SCAL-MOOKJA에 출전하기로 한 무근이와 인서는 대회 준비를 위해 같이 모여 문제를 풀기로 했다.

그런데 어느 날, 일어나서 날짜를 확인해 보니 무근이와 인서의 시계가 서로 다른 날짜를 가리키고 있었다. 두 사람이 정확한 날짜에 모일 수 있도록 문제를 푸는 지금 시각이 UTC+0(세계 표준시)을 기준으로 무슨 날짜인지 출력해 주는 프로그램을 작성하자.

만약 서울에서 확인한 시각이 2018년 9월 29일 오후 2시 정각이라면 UTC+0 기준의 시각은 2018년 9월 29일 오전 5시 정각이다. 

 

1.C99

#include <stdio.h>
#include <time.h>
main() {
    time_t base=time(NULL);
    struct tm* t;
    t = gmtime(&base);
    printf("%d\n%d\n%d", t->tm_year + 1900, t -> tm_mon + 1, t->tm_mday); 
}

time_t 타입 base에 time(NULL)을 넣는다. 구조체 tm 을 불러온다.. 

t에다가 gmtime(&base). gmtime은 세계표준시를 불러오는 함수이다. 

출력한다. 

 

2.Python

from datetime import datetime,timedelta
now=datetime.now()+timedelta(hours=9)
print(now.year)
print("%02d" %now.month)
print("%02d" %now.day)

근데 파이썬으로 코딩을 했는데 계속 틀렸다고 떠서..timedelta를 +로 고쳤더니 맞게 채점이 된다. 왜 9시간을 더하지..? datetime.now()는 현재 서울 표준시를 불러오는데 세계 표준시로 출력하려면, 서울이 세계 표준시보다 9시간 빠르므로 9시간을 빼야하는거 아닌가? ....이해가 안 간다 

 

-> 이야기를 나눠보니 동기 언니가 빼는걸로 제출했는데 정답이라 채점되었다고 한다... 내가 오타를 낸건가 싶기도 하고. 


 

댓글