5622:ダイヤル-java&&js
17115 ワード
はそんなに難しい問題ではありません.
大文字AをAskyコードに変換すると整数65の概念になります
A, B, C -> 65, 66, 67//(-65) -> 0, 1, 2 ->/3 == 0
D, E, F -> 68, 69, 70//(-65) -> 3, 4, 5 ->/3 == 1
...
では、アルファベットごとに65の値を3で割ったものを減らします.
3を加えるとアルファベットに対応する数字が出てくるでしょう?
でもちょっと待って!
S V Y Zは単独で処理する
PQRSから格押ししていく奴らに注意!
まずはJavaで解きましょう
コードの進捗は同じですが、javaコードとは違うところをメインに見てみます!
△私はJavaに詳しいので、まずJavaを解いて、それからJavaScriptを解いた.足りないところを見たら、すぐにメッセージを残してください.
最初にAskyコードを読む方法には違いがあるでしょう.
JAvaは,以下のコードのように文字型の文字を直接askiコードと解釈し,int型と計算することができる.
名前の関数を使用して、Askyコードを整数で受信できます.
int型の除算計算ではJavaは小数点を自動的に放棄する.
JavaScriptは整数除算計算にMathを使用します.floor()関数を使用して小数点を直接破棄する必要があります.
同じコードに見えますが、実はここには恐ろしい罠が隠されています!
実は私もその罠を見つけていません~ブーブー~!
そう「なんでフレーム」と叫んで今回のポスターを終わらせよう
なぜjavascriptコードが正しく答えられないのかご存知の方がいらっしゃいましたら、メッセージをお願いしますㅠㅠ
大文字AをAskyコードに変換すると整数65の概念になります
A, B, C -> 65, 66, 67//(-65) -> 0, 1, 2 ->/3 == 0
D, E, F -> 68, 69, 70//(-65) -> 3, 4, 5 ->/3 == 1
...
では、アルファベットごとに65の値を3で割ったものを減らします.
3を加えるとアルファベットに対応する数字が出てくるでしょう?
でもちょっと待って!
S V Y Zは単独で処理する
PQRSから格押ししていく奴らに注意!
まずはJavaで解きましょう
import java.io.IOException;
import java.util.Scanner;
public class Dial_5622 {
public static void main(String[] args) throws IOException {
Scanner stdIn = new Scanner(System.in);
String str = stdIn.next();
char[] chars = str.toCharArray();
int answer = 0;
for(int i = 0; i<chars.length;i++) {
int alph = chars[i] - 65;
answer += (alph/3) + 3;
if(alph == 83 || alph == 86 || alph== 89 || alph == 90) { //S V Y Z
answer -= 1;
}
}
System.out.println(answer);
}
}
このように開くことができますが、Scannerよりも速いBufferedReaderを使うのも良い方法です.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
//BufferedReader 사용!
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();// 개행 문자('\n', '\r')를 만날 때까지 한 줄을 읽습니다.
char[] chars = str.toCharArray();
int answer = 0;
for(int i = 0; i<chars.length;i++) {
int alph = chars[i] - 65;
answer += (alph/3) + 3;
if(alph == 83 || alph == 86 || alph== 89 || alph == 90) { //S V Y Z
answer -= 1;
}
}
System.out.println(answer);
}
}
JavaScriptコードを見てみましょうか?コードの進捗は同じですが、javaコードとは違うところをメインに見てみます!
△私はJavaに詳しいので、まずJavaを解いて、それからJavaScriptを解いた.足りないところを見たら、すぐにメッセージを残してください.
let fs = require('fs');
let input = fs.readFileSync('dev/stdin').toString().split('\n');
var answer = 0;
for(var i = 0; i<input.length; i++){
var ascii = input.charCodeAt(i); // "문자열".charCodeAt([문자열 자릿수]);
var alph = ascii - 65;
//answer += (alph/3) + 3; //소숫점이 계산되어 버렸음!
answer += Math.floor((alph/3)) + 3; //Math.floor() : 소수점 버림, 정수 반환
if(input[i] == 83 || input[i] == 85 || input[i]==89 || input[i]==90){
answer -=1;
}
}
console.log(answer);
違う点が見えますよね?最初にAskyコードを読む方法には違いがあるでしょう.
JAvaは,以下のコードのように文字型の文字を直接askiコードと解釈し,int型と計算することができる.
int alph = chars[i] - 65;
JavaScriptは「文字列」です.charCodeAt([idx]);名前の関数を使用して、Askyコードを整数で受信できます.
var ascii = input.charCodeAt(i);
次に注意したいのは整数除算計算です!int型の除算計算ではJavaは小数点を自動的に放棄する.
answer += (alph/3) + 3;
しかしjavascriptがそうすると小数点がそのまま出てきますㅠJavaScriptは整数除算計算にMathを使用します.floor()関数を使用して小数点を直接破棄する必要があります.
answer += Math.floor((alph/3)) + 3;
さぁ~ここでいきなりクイズ!!同じコードに見えますが、実はここには恐ろしい罠が隠されています!
実は私もその罠を見つけていません~ブーブー~!
そう「なんでフレーム」と叫んで今回のポスターを終わらせよう
なぜjavascriptコードが正しく答えられないのかご存知の方がいらっしゃいましたら、メッセージをお願いしますㅠㅠ
Reference
この問題について(5622:ダイヤル-java&&js), 我々は、より多くの情報をここで見つけました https://velog.io/@nyoongoon/5622다이얼java-jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol