白駿2138電球とスイッチ(Java、Java)
16654 ワード
今回解決した問題.
白駿2138号電球とスイッチ.
📕 質問リンク
❗¥コード
N個の電球とN個のスイッチが並んでいる場合、Nを押すとN−1、N、N+1の電球を開閉することができます.
これは、入力された電球が所定の状態になるように、押下可能なスイッチ回数の最大値を求めるという問題である.不可能な場合は-1を出力します.
まず、2つの場合に1つ目のスイッチを押すかどうかを確認できます.
理由を説明すると、まず、各電球の状態に影響を与えるインデックスは、あなた自身と以前のインデックスです.(N−1,N)従って、1番スイッチから順次ナビゲーションを開始する際に、N−1番電球の状態を比較することにより、N番スイッチが押下されたか否かを判断し、結果に順次アクセスすることができる.上記の方法を適用するには、0番のインデックスから決定して開始する必要があります.そのため、1番のスイッチ(インデックスが0)と0以外の2つの方法でナビゲートすることで、この問題を解決できます.
実行プロセスは難しくないので、省略します.
📜 ポスト
これは容易に実施できるが、解決しにくい問題である.
googlingでいくつかのアイデアを得ましたが、次回似たような問題が発生したら、簡単に解決できるはずです!^^
白駿2138号電球とスイッチ.
📕 質問リンク
❗¥コード
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N;
static boolean [][] map;
static boolean [] dest;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
String tmp = br.readLine();
map = new boolean[2][N];
dest = new boolean[N];
for(int i = 0; i < N; ++i)
{
boolean b = tmp.charAt(i) == '1';
map[0][i] = b;
map[1][i] = b;
}
tmp = br.readLine();
for(int i = 0; i < N; ++i) dest[i] = tmp.charAt(i) == '1';
for(int i = 0; i < 2; ++i) map[0][i] = !map[0][i]; // 0 1 누름
int answer = Integer.MAX_VALUE;
int cnt = 1;
for(int t = 0; t < 2; ++t)
{
for(int i = 1; i < N-1; ++i)
{
if(map[t][i-1] != dest[i-1])
{
press(t,i);
cnt++;
}
}
if(map[t][N-2] != dest[N-2])
{
map[t][N-2] = !map[t][N-2];
map[t][N-1] = !map[t][N-1];
cnt++;
}
if(map[t][N-1] == dest[N-1]) answer = Math.min(answer,cnt);
cnt = 0;
}
if(answer == Integer.MAX_VALUE) answer = -1;
System.out.print(answer);
}
static void press(int idx, int num)
{
for(int i = num-1; i < num+2; ++i) map[idx][i] = !map[idx][i];
}
}
📝 に答えるN個の電球とN個のスイッチが並んでいる場合、Nを押すとN−1、N、N+1の電球を開閉することができます.
これは、入力された電球が所定の状態になるように、押下可能なスイッチ回数の最大値を求めるという問題である.不可能な場合は-1を出力します.
まず、2つの場合に1つ目のスイッチを押すかどうかを確認できます.
理由を説明すると、まず、各電球の状態に影響を与えるインデックスは、あなた自身と以前のインデックスです.(N−1,N)従って、1番スイッチから順次ナビゲーションを開始する際に、N−1番電球の状態を比較することにより、N番スイッチが押下されたか否かを判断し、結果に順次アクセスすることができる.上記の方法を適用するには、0番のインデックスから決定して開始する必要があります.そのため、1番のスイッチ(インデックスが0)と0以外の2つの方法でナビゲートすることで、この問題を解決できます.
実行プロセスは難しくないので、省略します.
📜 ポスト
これは容易に実施できるが、解決しにくい問題である.
googlingでいくつかのアイデアを得ましたが、次回似たような問題が発生したら、簡単に解決できるはずです!^^
Reference
この問題について(白駿2138電球とスイッチ(Java、Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@jh5253/백준-2138-전구와-스위치-Java자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol