33~40/91
-
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
-
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
-
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를 매핑할 때 화살표를 사용한다.
-
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()
-
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 중 입력받은 문자열에 존재하는 알파벳만 남기는 방식.
-
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
-
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와 마찬가지로 알파벳도 가능하다.