Category - Baekjoon

Baekjoon 문제 풀이
9~16/68
  • 바구니 뒤집기 (10811)

    2023-02-23 18:09:00 i번 바구니부터 j번 바구니까지 공의 순서를 역순으로 뒤집어라. Bash read n m arr=() for ((i=0; i<=n; i++)); do arr+=($i); done for ((idx=0; idx<m; idx++)); do read i j for ((jdx=i; jdx<=(i+j)/2; jdx++)); do bak=${arr[$jdx]} arr[$jdx]=${arr[$((j-jdx+i))]} arr[$((j-jdx+i))]=$bak done done echo "${arr[@]:1}" Node.js const [[n, m], ...input] = require("fs").readFileSync(0).toString().trim().split("\n").map(x => x.split(" ").map(Number)); let arr = [...Array(n+1).keys()]; for (let [i, j] of input) { for (let idx=i; idx<=(i+j)/2; idx++) { let bak = arr[idx]; arr[idx] = arr[j-idx+i]; arr[j-idx+i] = bak; } } console.log( arr.slice(1).join(" ") ); Python3 n, m = map(int, input().split()) arr = [i for i in range(n+1)] for idx in range(m): i, j = map(int, input().split()) for jdx in range(i, int((i+j)/2)+1): arr[jdx], arr[j-jdx+i] = arr[j-jdx+i], arr[jdx] print( ' '.join(map(str, arr[1:])) ) Ruby n, m = gets.chomp.split().map {|i| i.to_i} arr = (0..n).to_a for idx in 0...m i, j = gets.chomp.split().map {|i| i.to_i} for jdx in i..(i+j)/2 arr[jdx], arr[j-jdx+i] = arr[j-jdx+i], arr[jdx] end end puts arr[1, n].join(" ")
  • 공 바꾸기 (10813)

    2023-02-23 17:46:00 i번 바구니와 j번 바구니의 공을 서로 바꿔라. Bash read n m arr=() for ((i=0; i<=n; i++)); do arr+=($i); done for ((idx=0; idx<m; idx++)); do read i j bak=${arr[$i]} arr[$i]=${arr[$j]} arr[$j]=$bak done echo "${arr[@]:1}" Node.js const [[n, m], ...input] = require("fs").readFileSync(0).toString().trim().split("\n").map(x => x.split(" ").map(Number)); let arr = [...Array(n+1).keys()]; for (let [i, j] of input) { let bak = arr[i]; arr[i] = arr[j]; arr[j] = bak; } console.log( arr.slice(1).join(" ") ); Python3 n, m = map(int, input().split()) arr = [i for i in range(n+1)] for idx in range(m): i, j = map(int, input().split()) arr[i], arr[j] = arr[j], arr[i] print( ' '.join(map(str, arr[1:])) ) Ruby n, m = gets.chomp.split().map {|i| i.to_i} arr = (0..n).to_a for idx in 0...m i, j = gets.chomp.split().map {|i| i.to_i} arr[i], arr[j] = arr[j], arr[i] end puts arr[1, n].join(" ")
  • 공 넣기 (10810)

    2023-02-23 16:53:00 i번 바구니부터 j번 바구니까지 k번 공을 넣어라. Bash read n m arr=() for ((i=0; i<n; i++)); do arr+=(0); done for ((idx=0; idx<m; idx++)); do read i j k for ((jdx=i-1; jdx<j; jdx++)); do arr[$jdx]=$k done done echo "${arr[@]}" Node.js const [[n, m], ...input] = require("fs").readFileSync(0).toString().trim().split("\n").map(x => x.split(" ").map(Number)); let arr = Array(n).fill(0); for (let [i, j, k] of input) { for (let idx=i-1; idx<j; idx++) { arr[idx] = k; } } console.log( arr.join(" ") ); Python3 n, m = map(int, input().split()) arr = ["0" for i in range(n)] for idx in range(m): i, j, k = map(int, input().split()) for jdx in range(i-1, j): arr[jdx] = str(k) print( ' '.join(arr) ) Ruby n, m = gets.chomp.split().map {|i| i.to_i} arr = Array.new(n, 0) for idx in 0...m i, j, k = gets.chomp.split().map {|i| i.to_i} for jdx in i-1...j arr[jdx] = k end end puts arr.join(" ")
  • 코딩은 체육과목 입니다 (25314)

    2023-02-22 20:28:00 손 코딩..? Bash read n o="" for ((i=0; i<n; i+=4)); do o+="long " done echo $o"int" i를 4씩 증가하는 방법 Node.js let n = Number(require("fs").readFileSync(0).toString().trim()); let o = ""; for (let i=0; i<n/4 i++) { o += "long "; } console.log(o + "int"); i를 n/4까지 1씩 증가하는 방법 PHP <?php fscanf(STDIN, "%d", $n); for ($i=0; $i<$n; $i+=4) { echo "long "; } echo "int"; ?> 반복문을 돌면서 줄바꿈을 하지 않고 바로 출력하는 방법 Python3 n = int(input()) o = ["long" for i in range(0, n, 4)] print(" ".join(o) + " int") range(0, n, 4): 0부터 4씩 증가하여 n 미만까지의 값을 리스트로 만듦 Ruby n = gets.chomp.to_i o = "" for i in (0...n).step(4) o += "long " end puts o + "int" (0...n).step(4)와 Python의 range(0, n, 4)는 다르다. Python의 range는 배열을 생성하지만, Ruby의 step은 앞에 주어진 범위에서 4씩 건너뛰는 방식이다. 즉, arr = ('a'..'z'); arr.step(2)도 가능하다.
  • 꼬마 정민 (11382)

    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
  • 그룹 단어 체커 (1316)

    2023-02-19 16:43:00 그룹 단어의 개수를 구하라. Bash read n cnt=0 for ((i=0; i<n; i++)); do read str bak="" group=1 while [ "$str" != "" ]; do x=${str::1} if [[ "$bak" != *"$x"* ]]; then bak=$x$bak elif [ "$x" != "${bak::1}" ]; then group=0 break fi str="${str:1}" done ((cnt += group ? 1 : 0)) done echo $cnt Node.js const [n, ...arr] = require("fs").readFileSync(0).toString().trim().split("\n"); cnt = 0; for (let str of arr) { let arr = []; group = true; for (let x of str) { if (arr.indexOf(x) == -1) { arr.push(x); } else if (arr[arr.length-1] != x) { group = false; break } } if (group) cnt++; } console.log(cnt); Python3 n = int(input()) cnt = 0 for i in range(n): a = input() arr = [] group = True for x in a: if x not in arr: arr.append(x) elif and arr[-1] != x: group = False break if group: cnt += 1 print(cnt) Ruby n = gets.chomp.to_i cnt = 0 for i in 0...n str = gets.chomp.split("") arr = [] group = true for x in str if !arr.index(x) arr.append(x) elsif arr[-1] != x group = false break end end cnt += 1 if group end puts cnt
  • 크로아티아 알파벳 (2941)

    2023-02-19 16:19:00 크로아티아 알파벳으로 변환 후 출력하는 게 아닌, 알파벳의 개수를 묻는 문제이므로 변경된 문자열을 아무 문자로 바꾸고 문자열의 길이를 출력하면 된다. Bash arr=(c= c- dz= d- lj nj s= z=) read str for x in ${arr[@]}; do str="${str//$x/ }" done echo "${#str}" Node.js const arr = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="]; let str = require("fs").readFileSync(0).toString().trim(); for (let x of arr) { str = str.replace(new RegExp(x, 'g'), ' '); } console.log(str.length); replace(/x/g, ' ')를 사용하면 x를 변수가 아닌 문자 x로 인식한다. RegExp 함수를 사용하면 변수를 사용할 수 있다. Python3 arr = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="] a = input() for x in arr: a = a.replace(x, ' ') print(len(a)) Ruby arr = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="] str = gets.chomp for x in arr str = str.gsub(x, ' ') end puts str.size
  • 다이얼 (5622)

    2023-02-19 15:41:00 이 문제는 일반 배열을 사용해도 되지만 key-value 배열을 사용해도 된다. Bash declare -A arr=( [1]= [2]=ABC [3]=DEF [4]=GHI [5]=JKL [6]=MNO [7]=PQRS [8]=TUV [9]=WXYZ [0]= ) t=0 read str while [ "$str" != "" ]; do x=${str::1} for i in {0..9}; do if [[ "${arr[$i]}" =~ "$x" ]]; then ((t += i+1)) break fi done str=${str:1} done echo $t Bash에서는 key-value 배열을 생성하려면 변수 타입을 지정해주는 declare 명령어를 사용해야 한다. declare 명령어의 옵션 A가 key-value 배열을 생성해주는 옵션이며, [key]=value로 키와 값을 매핑한다. Node.js arr = { A: 2, B: 2, C: 2, D: 3, E: 3, F: 3, G: 4, H: 4, I: 4, J: 5, K: 5, L: 5, M: 6, N: 6, O: 6, P: 7, Q: 7, R: 7, S: 7, T: 8, U: 8, V: 8, W: 9, X: 9, Y: 9, Z: 9 } let t = 0 let str = require("fs").readFileSync(0).toString().trim().split(""); for (let x of str) { t += arr[x]+1; } console.log(t); key와 value의 위치를 바꾸면 배열의 길이는 길어지지만 시간을 구하는 코드는 짧아진다. Python3 arr = { 1: "", 2: "ABC", 3: "DEF", 4: "GHI", 5: "JKL", 6: "MNO", 7: "PQRS", 8: "TUV", 9: "WXYZ", 0: "" } t = 0 a = input() for x in a: for k in arr: if x not in arr[k]: continue t += k+1 break print(t) Python은 key-value 배열으로 for문을 사용하면 key값이 반복된다. Ruby arr = { "A" => 2, "B" => 2, "C" => 2, "D" => 3, "E" => 3, "F" => 3, "G" => 4, "H" => 4, "I" => 4, "J" => 5, "K" => 5, "L" => 5, "M" => 6, "N" => 6, "O" => 6, "P" => 7, "Q" => 7, "R" => 7, "S" => 7, "T" => 8, "U" => 8, "V" => 8, "W" => 9, "X" => 9, "Y" => 9, "Z" => 9 } t = 0 str = gets.chomp.split("") for x in str t += arr[x]+1 end puts t Ruby의 Key와 value를 매핑할 때 화살표를 사용한다.