[JAVA][白俊16663]13日の金曜日
18951 ワード
質問する
載雲はこの地域で有名なオコットファンです.よく図書館で琴の本を読み、外星文化財の研究に参加した載雲は、ある日大きな噂を聞いた.噂の正体は地球の未来に関する予言で、予言によれば2019年から13日金曜日までの数を数えなければ地球は滅亡する可能性がある.普段から思いやりのある載雲は、自分と自分の子孫のために、紀元後10万年から13日までの金曜日の数を毎年記録することにした.しかし、計算が苦手な積載雲はすべての計算を私たちに押しつけた.クラウドで2019年からN年までの累計13日金曜日の数量を計算して教えてあげます.
入力
1行目に整数Nを入力します.(2019 ≤ N ≤ 100,000)
しゅつりょく
1行目出力2019年からN年累計の13日金曜日の数量
✨ Methodology
毎年1回、毎月13日は金曜日です
この問題を解決するため、2019年1月1日の曜日を確認しました.1月1日は火曜日で、曜日配列を作る上で重要な役割を果たしています(自分で探したことがありますが、ヒントには...)
1.閏年
この問題を解決するためには、閏年を知る必要がある.
2月は28日か29日、Nが年度の場合、
if((N % 4==0 && N % 100!=0)||N % 400==0 )
2.日数と曜日
毎月の日数の配列と曜日の配列を格納する必要があります.
日数の配置
static int[] days = {0,31,28,31,30,31,30,31,31,30,31,30,31};
で表す.3. for loop
for(int i = 2019; i<=N ; i++) {//년
if((i%4==0 && i%100!=0)||i%400==0 ){//윤년일 경우 ->2월에 +1
days[2] = 29;}
else {days[2]=28;}//윤년이 아닐 경우
//inner for loop
}
for(int i = 2019; i<=N ; i++) {//년
if((i%4==0 && i%100!=0)||i%400==0 ){//윤년일 경우 ->2월에 +1
days[2] = 29;}
else {days[2]=28;}//윤년이 아닐 경우
for(int j = 1; j<=12;j++) {//월
if(date[(total_days+13)%7]==5) {//13해당 월의 13일이 금요일인가?
//System.out.println(i+"년"+j+"월"); //몇년 몇월달의 13일이 금요일인지 확인 가능
freaky_fridays++;} //13일이 금요일이면 카운트 ++
total_days+=days[j];}//확인이 끝났다면 해당 월의 일수를 총 일수에 더한다
}
総日数プラス13を確認するのは、金曜日以降ですが、その月の残りの日数を加算することは可能ですが、個人的には自分で加算するのではなく、先月までの総日数+13日%7で今月の13日が金曜日であることを確認した方が、その月の総日数を加算する方が簡単だと思いましたので、下記のようにコードします.すべてのソース
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BOJ_16463_13일의금요일 {
static int[] days = {0,31,28,31,30,31,30,31,31,30,31,30,31};
static int[] date = {1,2,3,4,5,6,7};//월~일 : 1월 1일이 화요일임
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());//2019~N년
int freaky_fridays = 0;//13일의 금요일
int total_days = 0;
for(int i = 2019; i<=N ; i++) {//년
if((i%4==0 && i%100!=0)||i%400==0 ){//윤년일 경우 ->2월에 +1
days[2] = 29;
}
else {days[2]=28;}//윤년이 아닐 경우
//Base Case:
for(int j = 1; j<=12;j++) {//월
if(date[(total_days+13)%7]==5) {
//System.out.println(i+"년"+j+"월");
freaky_fridays++;}
total_days+=days[j];}
}
System.out.println(freaky_fridays);
}
}
Reference
この問題について([JAVA][白俊16663]13日の金曜日), 我々は、より多くの情報をここで見つけました https://velog.io/@junbee/JAVA백준-16463-13일의-금요일テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol