Tag - Node.js

17~24/66
  • 상수 (2908)

    2023-02-19 15:10:00 숫자를 뒤집은 후 큰 수를 찾아라. Bash rev() { echo ${1: -1}${1:1:1}${1::1} } read n m n=`rev $n` m=`rev $m` echo $((n < m ? m : n)) rev 명령어를 사용할 수 없으므로 직접 문자열을 뒤집어야 한다. Node.js const arr = require("fs").readFileSync(0).toString().trim().split(" ").map(x => x.split("").reverse().join("")*1); console.log( Math.max(...arr) ); JavaScript는 배열만 뒤집을 수 있어서 문자열을 하나씩 잘라 배열로 만든 후 뒤집고 다시 합친 것이다. Python3 arr = map(int, input()[::-1].split(" ")) print( max(arr) ) Python3에도 reverse, reversed 함수가 있지만 이는 배열에만 적용되고, 문자열은 var[::-1]로 뒤집을 수 있다. Ruby arr = gets.chomp.split().map {|i| i.reverse().to_i} puts arr.max()
  • 단어 공부 (1157)

    2023-02-18 18:05:00 주어진 단어에서 제일 많은 알파벳은? Bash read str str="${str^^}" arr=(0 "") for x in {A..Z}; do cnt=${str//[^$x]/} cnt=${#cnt} if [ $cnt == 0 ]; then continue elif [ "${arr[0]}" -le $cnt ]; then if [ $arr -lt $cnt ]; then arr[0]=$cnt arr[1]="" fi arr[1]+=$x fi done test ${#arr[1]} == 1 && echo ${arr[1]} || echo ? ${var^^}: 모두 대문자로 변환 ${var,,}: 모두 소문자로 변환 하지만 시간 초과.. Node.js const str = require("fs").readFileSync(0).toString().trim().toUpperCase().split(""); const set = str.filter((r, i) => { return str.indexOf(r) == i; }); let arr = [0, ""]; for (let x of set) { let n = str.filter(s => s == x).length; if (arr[0] <= n) { if (arr[0] < n) { arr[0] = n; arr[1] = ""; } arr[1] += x; } } console.log(arr[1].length == 1 ? arr[1] : "?"); Python3 a = input().upper() ls = set(a) arr = [0, ""] for x in ls: n = a.count(x) if arr[0] <= n: if arr[0] < n: arr[0] = n arr[1] = "" arr[1] += x print(arr[1] if len(arr[1])==1 else "?") Ruby str = gets.chomp.upcase() set = ("A".."Z").to_a & str.split("") arr = [0, ""] for x in set n = str.count(x) if arr[0] <= n if arr[0] < n arr[0] = n arr[1] = "" end arr[1] += x end end puts arr[1].size == 1 ? arr[1] : "?" and 연산을 이용하여 A to Z 중 입력받은 문자열에 존재하는 알파벳만 남기는 방식.
  • 문자열 반복 (2675)

    2023-02-18 17:52:00 문자열의 모든 문자를 r번 반복하라. Bash read t for ((i=0; i<t; i++)); do read r s while [ "$s" != "" ]; do for ((j=0; j<r; j++)); do echo -n "${s::1}" done s="${s:1}" done echo done Node.js const [t, ...str] = require("fs").readFileSync(0).toString().trim().split("\n"); for (let [r, s] of str.map(x => x.split(" "))) { let arr = []; for (let x of s) { for (let i=0; i<r; i++) { arr.push(x); } } console.log(arr.join("")); } Python3 t = int(input()) for i in range(t): r, s = input().split() for x in s: for j in range(int(r)): print(x, end='') print() Ruby t = gets.chomp.to_i for i in 0...t r, s = gets.chomp.split() for x in s.split("") for j in 0...r.to_i print x end end puts end
  • 알파벳 찾기 (10809)

    2023-02-17 18:14:00 각 알파벳이 처음 위치한 곳은? Bash read str for x in {a..z}; do idx=-1 bak="$str" for ((i=0; 0<${#bak}; i++)); do if [ "${bak::1}" == "$x" ]; then idx=$i break fi bak="${bak:1}" done echo -n "$idx " done {0..5}를 사용해서 0부터 5까지의 숫자를 사용하는 것처럼 알파벳도 가능하다. Node.js const str = require("fs").readFileSync(0).toString().trim(); let arr = []; for (let i='a'.charCodeAt(0); i<'z'.charCodeAt(0)+1; i++) { let x = String.fromCharCode(i); arr.push( str.indexOf(x) ); } console.log( arr.join(" ") ); 아스키 코드를 이용하여 a부터 z까지의 알파벳을 가져오는 방식. a의 아스키 코드는 97, z의 아스키 코드는 122이므로 for (let i=97; i<123; i++) {...}으로 사용해도 된다. Python3 s = input() for x in range(ord('a'), ord('z')+1): print(s.find(chr(x)), end=' ') JavaScript와 같은 이유로 range(97, 123)으로 사용해도 된다. Ruby str = gets.chomp for x in 'a'..'z' n = str.index(x) print "#{n ? n : -1} " end Bash와 마찬가지로 알파벳도 가능하다.
  • 숫자의 합 (11720)

    2023-02-17 17:46:00 주어진 수의 각 자릿수를 모두 더한 값은? Bash read n read m #while [ $m != 0 ]; do # ((t += m%10, m /= 10)) #done for ((i=0; i<$n; i++)); do add=${m:$i:1} ((t += add)) done echo $t 주석 처리된 코드는 백준에서 틀린 답이라고 나온다. Node.js const [n, num] = require("fs").readFileSync(0).toString().trim().split("\n"); const arr = num.split("").map(Number); console.log( arr.reduce((r, x, i) => { return r+x; }) ); Python3 n = int(input()) arr = map(int, list(input())) print( sum(arr) ) Ruby n = gets.chomp.to_i arr = gets.chomp.split("").map {|i| i.to_i} puts arr.sum()
  • 아스키 코드 (11654)

    2023-02-16 16:37:00 문자를 숫자형으로 출력하면 아스키 코드가 나오기도 한다. Bash read str printf '%d\n' "'$str" $str 앞의 따옴표는 뒤에 오는 문자를 아스키 코드로 출력하기 위해 넣어줘야 한다. C #include <stdio.h> int main(void) { char str; scanf("%c", &str); printf("%d\n", str); return 0; } Node.js let str = require("fs").readFileSync(0).toString().trim(); console.log( str.charCodeAt(0) ); PHP <?php fscanf(STDIN, "%c", $x); echo ord($x); ?> Python3 print(ord(input())) Ruby puts gets.chomp.ord
  • 한수 (1065)

    2023-02-04 19:45:00 100 미만인 자연수는 무조건 한수다. Bash f_cus() { if [ $1 -lt 100 ]; then return 0; fi o=$(($1%10 - $1/10%10)) n=$(($1 / 10)); while [ 10 -le $n ]; do if [ $((n/10%10 + o)) != $((n % 10)) ]; then return 1; fi n=$((n / 10)) done return 0 } read n cnt=0 for ((i=n; 0<i; i--)); do if f_cus $i; then ((cnt++)) fi done echo $cnt C #include <stdio.h> #include <stdbool.h> #include <math.h> bool f_cus(int n) { if (n < 100) return true; int o = n%10 - n/10%10; n /= 10; while (10 <= n) { if (floor(n/10%10) + o != n%10) return false; n /= 10; } return true; } int main(void) { int n, cnt = 0; scanf("%d", &n); for (int i=1; i<=n; i++) { if (f_cus(i)) cnt += 1; } printf("%d\n", cnt); return 0; } Node.js const f_cus = function(n) { if (n < 100) return true; sn = n+""; o = sn[1]*1 - sn[0]*1; for (let i=1; i<sn.length-1; i++) { if (sn[i]*1 + o != sn[i+1]*1) return false; } return true; } let n = Number(require("fs").readFileSync(0).toString().trim()); let cnt = 0; for (let i=1; i<=n; i++) { if (f_cus(i)) cnt += 1; } console.log(cnt); PHP <?php function f_cus($n) { if ($n < 100) return true; $bak = $n; $o = $n%10 - $n/10%10; $n = floor($n/10); while (10 <= $n) { if (floor($n/10%10) + $o != $n%10) return false; $n = floor($n/10); } return true; } fscanf(STDIN, "%d", $n); $cnt = 0; for ($i=1; $i<=$n; $i++) { if (f_cus($i)) $cnt += 1; } echo $cnt; ?> Python3 def f_cus(n): if n < 100: return True sn = str(n) o = int(sn[1]) - int(sn[0]) for i in range(1, len(sn)-1): if int(sn[i]) + o != int(sn[i+1]): return False return True n = int(input()) cnt = 0 for i in range(1, n+1): if f_cus(i): cnt+=1 print(cnt) Ruby def f_cus(n) return true if n < 100 sn = n.to_s o = sn[1].to_i - sn[0].to_i for i in 1...sn.size-1 return false if sn[i].to_i + o != sn[i+1].to_i end return true end n = gets.chomp.to_i cnt = 0 for i in 1..n cnt+=1 if f_cus(i) end puts cnt
  • 셀프 넘버 (4673)

    2023-02-04 12:10:00 굳이 함수를 만들 필요가 없는 문제지만.. 함수 문제니 만들어야지.. Bash f_sum() { local s=$1 local i=0 for ((i=0; i<${#1}; i++)); do s=$((s + ${1:$i:1})) done echo $s } arr=({1..10000}) for i in {1..10000}; do s=`f_sum $i` idx=-1 for ((j=0; j<${#arr[@]}; j++)); do if [ ${arr[$j]} == $s ]; then idx=$j break fi done if [ $idx != -1 ]; then arr=(${arr[@]::$idx} ${arr[@]:$idx+1}) fi done for x in ${arr[@]}; do echo $x done Bash에서 함수는 사용법, 파라미터 받는 법 등 모든 게 명령어와 똑같이 사용된다. 즉, Bash는 함수에서도 return을 종료코드로 사용하기 때문에 이를 사용하여 문자열을 리턴할 수 없다. 물론 숫자를 리턴해서 $?로 값을 받으면 되긴 하지만 0은 정상적인 종료, 그 외는 비정상적인 종료를 의미하기 때문에 사용하지 않는 것이 좋다. 대신 함수 내에서 리턴하고 싶은 문자열을 출력하고 그 값을 받으면 된다. 다른 언어들과 달리 Bash는 함수 내에서 변수를 선언하면 기본적으로 전역변수로 선언된다. 지역변수로 선언하려면 local 명령어를 사용하면 된다. (e.g. local var=val) 하지만… 이 문제는 시간이 굉장히 오래 걸려서 시간 초과가 뜬다. C #include <stdio.h> int f_sum(int n) { int s = n; while (0 < n) { s += n%10; n /= 10; } return s; } int main(void) { int arr[10000] = {0,}; for (int i=1; i<=10000; i++) { int s = f_sum(i); if (s <= 10000) { arr[s-1] = 1; } } for (int i=0; i<10000; i++) { if (arr[i] != 1) { printf("%d\n", i+1); } } return 0; } Node.js const f_sum = function(n) { let s = n; for (let m of n+"") { s += m*1; } return s; } let arr = []; for (let i=1; i<=10000; i++) { arr.push(i); } for (let i=1; i<=10000; i++) { let s = f_sum(i); let idx = arr.indexOf(s); if (idx != -1) { arr.splice(idx, 1); } } console.log(arr.join("\n")); PHP <?php function f_sum($n) { $s = $n; while (0 < $n) { $s += $n%10; $n = floor($n/10); } return $s; } $arr = range(1, 10000); foreach (range(1, 10000) as $x) { $s = f_sum($x); $idx = array_search($s, $arr); if ($idx != "") { unset($arr[$idx]); } } echo join("\n", $arr); ?> Python3 def f_sum(n): s = n for m in str(n): s += int(m) return s arr = [i for i in range(1, 10001)] for i in range(1, 10001): s = f_sum(i) if s in arr: arr.remove(s) print("\n".join(map(str, arr))) Ruby def f_sum(n) s = n for m in n.to_s.split("") s += m.to_i end return s end arr = Array(1..10000) for i in 1..10000 s = f_sum(i) arr.delete_at(arr.index(s)) if arr.index(s) end puts arr