[BOJ] Bronze IV 부수기: 열다섯번째 날
- 코딩 초보. 효율적인 코드 구현이 아닐 수 있습니다.
- 구현언어: Python , C99
- 푼 문제: 2530, 2588,2752,2753,3004
- 못 푼 문제: 0개
2530. 인공지능 시계
KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 초 단위로 자동적으로 계산한다.
또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 초 단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.
1.C99
#include <stdio.h>
main() {
int a, b, c,d;
scanf("%d %d %d\n%d", &a, &b, &c,&d);
printf("%d %d %d",((a*3600+b*60+c+d)/3600>=24)? (a * 3600 + b * 60 + c+d) / 3600 %24: (a * 3600 + b * 60 + c+d) / 3600,
(a * 3600 + b * 60 + c + d)%3600/60, (a * 3600 + b * 60 + c + d) % 3600 % 60);
}
어제 푼 오븐 시계와 유사한 문제. hour 값이 48이 넘을 수 있으므로 어제처럼 24를 감소시키는 방법으로 코드를 짜면 hour값이 24를 넘어가버리므로 24로 나눈 나머지를 hour값으로 바꿔야 한다. 삼항연산자로 길게 늘여 썼다.
2.Python
a,b,c=map(int,input().split())
d=int(input())
if ((a*3600+b*60+c+d)//3600>=24):
hour=(a*3600+b*60+c+d)//3600%24
else:
hour=(a*3600+b*60+c+d)//3600
minute=(a * 3600 + b * 60 + c + d)%3600//60
second=(a * 3600 + b * 60 + c + d)%3600%60
print("%d %d %d" %(hour,minute,second))
파이썬도 같은 방식으로 코드를 짜주면 된다.
2588. 곱셈
(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.
(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.
1.C99
#include <stdio.h>
main() {
int a, b,c,d,e;
scanf("%d\n%d", &a, &b);
c = a * (b % 10);
d = a * ((b / 10) % 10);
e = a * (((b / 10) / 10)%10);
printf("%d\n%d\n%d\n%d", c, d, e, a * b);
}
2.Python
a=int(input())
b=int(input())
lst=[]
answer=a*b
for i in range(3):
lst.append(b%10)
b=b//10
c=a*lst[0]
d=a*lst[1]
e=a*lst[2]
print(c)
print(d)
print(e)
print(answer)
예전에..파이썬으로 풀어놨었던 문제다. 단순히 나눗셈과 나머지를 잘 처리해서 곱해주고 출력하면 되도록 코드를 짜면 된다.
2752. 세 수 정렬
동규는 세수를 하다가 정렬이 하고싶어졌다.
숫자 세 개를 생각한 뒤에, 이를 오름차순으로 정렬하고 싶어 졌다.
숫자 세 개가 주어졌을 때, 가장 작은 수, 그 다음 수, 가장 큰 수를 출력하는 프로그램을 작성하시오.
1.C99
#include <stdio.h>
main() {
int s[3],temp;
scanf("%d %d %d", &s[0], &s[1], &s[2]);
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 2; i++) {
if (s[i] > s[i + 1]) {
temp = s[i + 1];
s[i + 1] = s[i];
s[i] = temp;
}
}
}
printf("%d %d %d", s[0], s[1], s[2]);
}
이중 for 반복문으로 배열 차례차례 크기 비교를 수행하여 해당 배열 위치에 값을 순서대로 저장하도록 하였다.
2.Python
lst=[]
a,b,c=map(int,input().split())
lst.append(a)
lst.append(b)
lst.append(c)
lst.sort()
print("%d %d %d" %(lst[0],lst[1],lst[2]))
파이썬의 경우 리스트.sort() 를 사용하여 더 쉽게 코드를 작성할 수 있었다.
2753. 윤년
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
1.C99
#include <stdio.h>
main() {
int n;
scanf("%d", &n);
if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
printf("1");
}
else {
printf("0");
}
}
단순한 조건문 출력 문제다.
2.Python
n=int(input())
if ((n%4 ==0 and n%100!=0) or n%400==0):
print(1)
else:
print(0)
3004. 체스판 조각
상근이는 3003번에서 동혁이가 발견한 체스판을 톱으로 자르려고 한다.
상근이는 체스판을 최대 N번 자를 수 있으며, 변에 평행하게만 자를 수 있다. 또, 자를 때는 체스판의 그 변의 한쪽 끝에서 다른쪽 끝까지 잘라야 한다. 자른 후에는 조각을 이동할 수 없다.
이때, 최대 몇 조각을 낼 수 있는지 구하는 프로그램을 작성하시오.
1.C99
#include <stdio.h>
main() {
int n,r,c;
scanf("%d", &n);
r = n / 2;
c = n - r;
printf("%d", (r + 1) * (c + 1));
}
머릿속으로 체스판을 자르는걸 그리면서 row, col을 신경쓰면 풀린다. 단순 수학 문제.
2.Python
n=int(input())
r=int(n/2)
c=n-r
print((r+1)*(c+1))
'💻STUDY > BOJ' 카테고리의 다른 글
[BOJ] 1152. 단어의 개수 (0) | 2022.01.12 |
---|---|
[BOJ] Bronze IV 부수기: 열여섯번째 날 (0) | 2022.01.11 |
[BOJ] Bronze IV 부수기: 열네번째 날 (0) | 2022.01.09 |
[BOJ] Bronze V,IV 부수기: 열세번째 날 (0) | 2022.01.08 |
[BOJ] Bronze V 부수기: 열두번째 날 (0) | 2022.01.07 |
댓글