Tag - C
1~8/46
-
2023-02-22 18:21:00 A+B 문제에서 변수 하나만 더 사용하면 된다. Bash read a b c echo $((a + b + c)) C #include <stdio.h> int main(void) { int a, b, c; scanf("%d %d", &a, &b, &c); printf("%d", a+b+c); return 0; } Node.js let [a, b, c] = require("fs").readFileSync(0).toString().trim().split(" ").map(Number); console.log(a + b + c); PHP <?php fscanf(STDIN, "%d %d", $a, $b, $c); echo $a + $b + $c; ?> Python3 a, b, c = map(int, input().split()) print(a+b+c) Ruby a, b, c = gets.chomp.split().map {|i| i.to_i} puts a+b+c
-
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
-
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
-
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
-
2023-02-02 22:28:00 이건 출제자가 너무했다.. Bash read c for ((i=0; i<c; i++)); do read arr n=${arr::1} arr=(${arr#* }) sum=0 for g in ${arr[@]}; do sum=$((sum + g)) done avg=$((sum*10 / n)) cnt=0 for g in ${arr[@]}; do if [ $avg -lt $((g * 10)) ]; then cnt=$((cnt + 1)) fi done p=$((cnt*1000000 / n)) e=${p:${#p}-1} p=${p%$e*} p=$((5 <= e ? p+1 : p)) n=${p:: -3} echo $n1.${p#$n}% done 정답과 똑같이 나오는데 백준에서는 런타임 에러가 든다. C #include <stdio.h> int main(void) { int c, n, cnt; float sum, avg; scanf("%d", &c); for (int i=0; i<c; i++) { scanf("%d", &n); int arr[n]; for (int j=0; j<n; j++) { scanf("%d", &arr[j]); } sum = 0; for (int j=0; j<n; j++) { sum += arr[j]; } avg = sum / n; cnt = 0; for (int j=0; j<n; j++) { cnt += avg < arr[j] ? 1 : 0; } printf("%.3f%%\n", (double)cnt/n*100); } return 0; } Node.js let [c, ...input] = require("fs").readFileSync(0).toString().trim().split("\n"); for (let arr of input) { [n, ...arr] = arr.split(" ").map(Number); let avg = arr.reduce((r, x, i) => { return r + x }) / n; cnt = 0; for (let g of arr) { if (avg < g) cnt++ } p = Math.round(cnt/n*100*1000) / 1000; console.log(`${p.toFixed(3)}%`); } JavaScript의 round()는 소수점 지정이 안되기 때문에 1000을 곱하고 다시 나눈다. PHP <?php fscanf(STDIN, "%d", $n); for ($i=0; $i<$n; $i++) { $arr = explode(" ", trim(fgets(STDIN))); $m = $arr[0]; $arr = array_slice($arr, 1); $avg = array_sum($arr)/$m; $cnt = 0; foreach ($arr as $x) { if ($avg < $x) { $cnt++; } } echo sprintf("%.3f", ($cnt/$m*100))."%\n"; } ?> Python3 c = int(input()) for i in range(c): arr = list(map(int, input().split())) n, arr = arr[0], arr[1:] avg = sum(arr)/n cnt = 0 for g in arr: if avg < g: cnt += 1 p = "{:.3f}%".format(cnt/n*100) print(p) Ruby c = gets.chomp.to_i for i in 0...c arr = gets.chomp.split().map {|i| i.to_i} n, arr = arr[0].to_f, arr.slice(1, arr.size-1) avg = arr.sum()/n cnt = 0 for g in arr cnt += 1 if avg < g end p = "%.3f" % (cnt/n*100) + "%" puts p end
-
2023-02-02 21:30:00 한 게임당 얻을 수 있는 최대 점수는? Bash read n for ((i=0; i<n; i++)); do read oxs g=0 sum=0 for ((j=0; j<${#oxs}; j++)); do [ "${oxs:$j:1}" == "O" ] && g=$((g + 1)) || g=0 sum=$((sum + g)) done echo $sum done C #include <stdio.h> #include <string.h> int main(void) { int n, g, sum; scanf("%d", &n); for (int i=0; i<n; i++) { sum = 0; char input[n+1]; scanf("%s", input); for (int j=0; j<strlen(input); j++) { g = input[j] == 'O' ? g + 1 : 0; sum += g; } printf("%d\n", sum); } return 0; } Node.js let [n, ...input] = require("fs").readFileSync(0).toString().trim().split("\n"); for (let oxs of input) { let g = 0; let sum = 0; for (let ox of oxs.split("")) { let g = ox == "O" ? g + 1 : 0 sum += g; } console.log(sum); } PHP <?php fscanf(STDIN, "%d", $n); for ($i=0; $i<$n; $i++) { $g = 0; $sum = 0; $oxs = trim(fgets(STDIN)); for ($j=0; $j<strlen($oxs); $j++) { $g = $oxs[$j] == "O" ? $g+1 : 0; $sum += $g; } echo $sum."\n"; } ?> Python3 n = int(input()) for i in range(n): oxs = input() arr = [0] for ox in oxs: g = arr[-1] + 1 if ox == "O" else 0 arr.append(g) print(sum(arr)) Ruby n = gets.chomp.to_i for i in 0...n oxs = gets.chomp.split("") arr = [0] for ox in oxs g = ox == "O" ? arr[-1] + 1 : 0 arr.push(g) end puts arr.sum() end Updated 1차원 배열의 8번 문제였으나 제외되었다.
-
2023-02-01 22:10:00 점수 조작은 나빠요..! Bash read n read -a arr max=$arr for ((i=1; i<n; i++)); do max=$((max < arr[i] ? arr[i] : max)) done total=0 for ((i=0; i<n; i++)); do total=$((total + arr[$i]*100 * 100 / $max)) arr[$i]=$((arr[$i]*100 * 100 / $max)) done avg=$((total / n)) n=${avg:: -2} echo $n.${avg#$n} 100을 한 번 더 곱한 이유는 Bash는 소수점 계산이 안되기 때문에. 같은 이유로 최댓값으로 나누기 전에 100을 먼저 곱해야 한다. C #include <stdio.h> int main(void) { int n, m, max = 0; scanf("%d", &n); float arr[n], total = 0; for (int i=0; i<n; i++) { scanf("%d", &m); arr[i] = m; max = max < m ? m : max; } for (int i=0; i<n; i++) { total += arr[i] / max * 100; } printf("%f\n", total/n); return 0; } Node.js let [n, ...arr] = require("fs").readFileSync(0).toString().trim().split(/ |\n/).map(Number); let max = Math.max(...arr); let total = arr.reduce((r, x, i) => { return r + x / max * 100; }); console.log(total / n); PHP <?php fscanf(STDIN, "%d", $n); $arr = explode(" ", trim(fgets(STDIN))); $max = max($arr); for ($i=0; $i<$n; $i++) { $arr[$i] = $arr[$i] / $max * 100; } echo array_sum($arr)/$n; ?> Python3 n = int(input()) arr = list(map(int, input().split())) m = max(arr) for i in range(n): arr[i] = arr[i] / m * 100 print( sum(arr)/n ) Ruby n = gets.chomp.to_i arr = gets.chomp.split().map {|i| i.to_f} max = arr.max() puts arr.map {|i| i / max * 100}.sum() / n 제일 짧은데 제일 오래 걸린다..