[Java]伯俊2775号[婦人会長になる]java
白俊2775号です.
https://www.acmicpc.net/problem/2775
質問する
https://www.acmicpc.net/problem/2775
質問する
普段からクラス会に参加するのが好きな朱熹は、この機会に女性会長になり、各階層の人を集めてクラス会を組織しようとした.
このアパートに住むには条件があり、「a階のb番に住むには、自分の下(a-1)階の1番からb番までの人数で、人を連れて帰って住む」という契約条項を守らなければならない.
アパートに空き家がないと仮定し、すべての住民がこの契約条件を守ったとすると、与えられた正の整数kとnに対して、k階印刷n号に何人が住んでいるのか.しかし、マンションは0階から、各階は1番から、0階のi号はi名である.
入力
最初の行はTestcaseの数Tを与える.そして、それぞれの場合、1行目の整数k、2行目の整数nを入力する
考える
アクション
何階の何番が何人住んでいるのか知りたければ、0階から探している階まで順番に上がればいいです.
フロアと湖を繰り返すので2階建てゲートを使います.
また、各階の1番は1人なので、n
が1なら、繰り返す必要はなく、直接1を出力しifゲートを使います.
else部分は,n
が1でなければ,すなわち,1番でなければ計算できないことを実現した.
なぜLinkedListを使うのか
データ構造はLinkedListを使用します.
最初はListを使っていましたが、階数が上がっているので渋滞するところがありました.
例えば、2階3番を求めた場合、最初の0階1番から3番までの人数をlist
とすると、[1,2,3]
の値はlist
となる.
次に、1階の人数から、下層の人数の影響を受けるので、前の階の人数の湖のデータが必要です.1階の湖を繰り返すj
の複文は引き続き1番から繰り返されるので、list.get()
で値を取るときは1番から取ります.list
で住民の価格を加算し続けると、list
の後の値に入るので、正しい値を出力できません.
それを考えると、headもtailも使えるLinkedList
が最適だと思います.
各戸籍の住民数はlinkedList.add()
で入力され、
次の階を過ぎて、linkedList.poll()
を通って前から値上げし、sum +=
を通って値上げを続けます.
その後、各層の湖を繰り返し、sum
を0に処理します.
各層の1番は1人なので、累積した和を適用し続けると、正しい値が得られません.
このように各層の数字を繰り返すと、linkedList.getLast()
によってlinkedList
の最後の居住世帯数が得られる.
住民数の計算が完了したら、必ずlinkedList.clear()
を計算しなければならない.
これにより、次の結果値が得られます.
TMI
最初はルールを見つけて問題を解決できると思います.
だから私はルールを見つけたいと思って、本当にたくさんのことをしましたが、見つかりませんでした.
友人の助けで等差数列であることが分かった.
下から計算して上がって、無駄なことをしないほうがいいと思います.
しかし、ここの問題.
ルールが見つからないのは問題ではありません.
だから0階から計算を始めた時、私がドアの上でもがいている様子を発見しました.
私は繰り返しの文章の中で、上の階の住民の人数をどのように獲得するかを考えた.
いずれにしても、問題を解いたが、問題を解いた後の感じは
なぜ本当の隣人を連れて生活するのか、
なぜその数字を知ったの?こんなアパートを建てた人は誰ですか.
出て行け
コード#コード# import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
LinkedList<Integer> linkedList = new LinkedList<>();
for(int i=0; i<T; i++) {
int k = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
if(n==1) {
linkedList.add(1);
}
else {
int sum = 0;
for(int l=0; l<=k; l++) {
for(int j=1; j<=n; j++) {
if(l == 0) {
linkedList.add(j);
}
else {
sum += linkedList.poll();
linkedList.add(sum);
}
}
sum = 0;
}
}
System.out.println(linkedList.getLast());
linkedList.clear();
} // for End
} // Main End
} // Class End
Reference
この問題について([Java]伯俊2775号[婦人会長になる]java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-2775번-부녀회장이-될테야-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
最初の行はTestcaseの数Tを与える.そして、それぞれの場合、1行目の整数k、2行目の整数nを入力する
考える
アクション
何階の何番が何人住んでいるのか知りたければ、0階から探している階まで順番に上がればいいです.
フロアと湖を繰り返すので2階建てゲートを使います.
また、各階の1番は1人なので、n
が1なら、繰り返す必要はなく、直接1を出力しifゲートを使います.
else部分は,n
が1でなければ,すなわち,1番でなければ計算できないことを実現した.
なぜLinkedListを使うのか
データ構造はLinkedListを使用します.
最初はListを使っていましたが、階数が上がっているので渋滞するところがありました.
例えば、2階3番を求めた場合、最初の0階1番から3番までの人数をlist
とすると、[1,2,3]
の値はlist
となる.
次に、1階の人数から、下層の人数の影響を受けるので、前の階の人数の湖のデータが必要です.1階の湖を繰り返すj
の複文は引き続き1番から繰り返されるので、list.get()
で値を取るときは1番から取ります.list
で住民の価格を加算し続けると、list
の後の値に入るので、正しい値を出力できません.
それを考えると、headもtailも使えるLinkedList
が最適だと思います.
各戸籍の住民数はlinkedList.add()
で入力され、
次の階を過ぎて、linkedList.poll()
を通って前から値上げし、sum +=
を通って値上げを続けます.
その後、各層の湖を繰り返し、sum
を0に処理します.
各層の1番は1人なので、累積した和を適用し続けると、正しい値が得られません.
このように各層の数字を繰り返すと、linkedList.getLast()
によってlinkedList
の最後の居住世帯数が得られる.
住民数の計算が完了したら、必ずlinkedList.clear()
を計算しなければならない.
これにより、次の結果値が得られます.
TMI
最初はルールを見つけて問題を解決できると思います.
だから私はルールを見つけたいと思って、本当にたくさんのことをしましたが、見つかりませんでした.
友人の助けで等差数列であることが分かった.
下から計算して上がって、無駄なことをしないほうがいいと思います.
しかし、ここの問題.
ルールが見つからないのは問題ではありません.
だから0階から計算を始めた時、私がドアの上でもがいている様子を発見しました.
私は繰り返しの文章の中で、上の階の住民の人数をどのように獲得するかを考えた.
いずれにしても、問題を解いたが、問題を解いた後の感じは
なぜ本当の隣人を連れて生活するのか、
なぜその数字を知ったの?こんなアパートを建てた人は誰ですか.
出て行け
コード#コード# import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
LinkedList<Integer> linkedList = new LinkedList<>();
for(int i=0; i<T; i++) {
int k = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
if(n==1) {
linkedList.add(1);
}
else {
int sum = 0;
for(int l=0; l<=k; l++) {
for(int j=1; j<=n; j++) {
if(l == 0) {
linkedList.add(j);
}
else {
sum += linkedList.poll();
linkedList.add(sum);
}
}
sum = 0;
}
}
System.out.println(linkedList.getLast());
linkedList.clear();
} // for End
} // Main End
} // Class End
Reference
この問題について([Java]伯俊2775号[婦人会長になる]java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-2775번-부녀회장이-될테야-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
LinkedList<Integer> linkedList = new LinkedList<>();
for(int i=0; i<T; i++) {
int k = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
if(n==1) {
linkedList.add(1);
}
else {
int sum = 0;
for(int l=0; l<=k; l++) {
for(int j=1; j<=n; j++) {
if(l == 0) {
linkedList.add(j);
}
else {
sum += linkedList.poll();
linkedList.add(sum);
}
}
sum = 0;
}
}
System.out.println(linkedList.getLast());
linkedList.clear();
} // for End
} // Main End
} // Class End
Reference
この問題について([Java]伯俊2775号[婦人会長になる]java), 我々は、より多くの情報をここで見つけました https://velog.io/@lifeisbeautiful/Java-백준-2775번-부녀회장이-될테야-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol