AR삽질러

Ruby 연습문제 본문

Ruby/Ruby-한국어

Ruby 연습문제

아랑팡팡 2023. 9. 8. 20:18
728x90

 

Ruby 연습문제

 

0. 문자열 반전

def reverse_string(str)
    
  end
  
  puts reverse_string("Hello, Ruby!")

 

def reverse_string(str)
    str.reverse
  end
  
puts reverse_string("안녕하세요! Ruby공부를 시작했습니다!")

 reverse : 배열이나 문자열의 요소를 역순으로 반전

 

0-1. 배열 반전

def reverse_array(arr)
    arr.reverse
end

arr = [4, 3, 2, 9, 8]

puts reverse_array(arr).inspect # 8, 9, 2, 3, 4

 

1. 배열의 합

def array_sum(arr)
  # 여기에 코드 작성
end

puts array_sum([1, 2, 3, 4, 5]) # 15

 

def array_sum(arr)
    sum = 0
    arr.each do |num|
        sum += num
    end
    sum
  end

  def array_sum2(num)
    sum = 0
    num.each do |num|
        sum += num
    end
    sum
  end
  
  puts array_sum([1, 2, 3, 4, 5]) # 15
  puts array_sum2([10, 20, 30, 40, 50]) # 150

 

each : 배열, 해시 등 열거형 객체의 각 요소에 대해 코드 블록을 실행한다.

|num| : 코드 블록 내에서 현재 요소를 참조하는데 사용되는 변수이다.

 

2. 팩토리얼 계산

def factorial(n)
  # 여기에 코드 작성
end

puts factorial(5) # 120

 

2-1. 재귀함수

def factorial(n)
    return 1 if n == 0
    n * factorial(n -1)
end

puts factorial(5) # 120

factorial(n) : 변수 b을 받아 n의 팩토리얼을 계산한다.

return 1 if n == 0  : n 이 0일 때 1을 반환한다. (0 != 1)

n * factorial(n - 1)  : n이 0이 아니면 현재의 n과 n-1의 팩토리얼의 곱을 반환한다.

 

2-2. 반복문

def factorial(n)
    result = 1
    (1..n).each do |i|
      result *= i
    end
    result
  end
  
puts factorial(5) # 120

factorial(n) : n을 입력받아 그 수의 팩토리얼을 계산한다.

result : 변수를 1로 초기화한다.

(1..n).each do |i|  : 1 ~ n까지 반복문을 실행한다.

result *- i  : 변수에 현재 숫자 i를 곱해

end result  : 최종값을 반환한다.

 

3. 중복 요소 찾기

def find_duplicates(arr)
  # 여기에 코드 작성
end

puts find_duplicates([1, 2, 3, 3, 4, 5, 5]).inspect # [3, 5]

 

def find_duplicatenumber(arr)
    arr.find_all {|item| arr.count(item) > 1}.uniq
end

puts find_duplicatenumber([1, 2, 3, 3, 4, 5, 5]).inspect # 3, 5

find_duplicates(arr)  : 매개변수 arr를 받는다.

find_all  : Ruby의 Enumerable 모듈의 메서드중 하나로 모든 요소를 순회하며 블록의 조건을 만족하는 요소로 배열을 만든다.

{|item| arr.count(item) > 1}.uniq  : |item|은 arr배열의 각 요소를 나타낸다. arr.count(item) > i 조건은 배열 내의 item의 개수가 1보다 큰지를 확인한다.

uniq  : 배열에서 중복된 요소를 제거한다.

.inspect  : 문자열 형태로 반환

 

3-1. 숫자중 짝수 / 홀수 찾기

def number1(num)
    num.find_all{|num| num.even?} # 짝수
end

def number2(num)
    num.find_all{|num| num.odd?} # 홀수
end

num = [1, 2, 3, 4, 5, 6]

puts number1(num).inspect
puts number2(num).inspect

even?  : 짝수판별

odd?  : 홀수판별

find_all  : 특정 조건을 충족하는 요서만 새로운 배열을 생성

.inspect  : 문자열 형태로 반환

 

4. 랜덤 숫자 배열 생성 후 정렬

def generate_and_sort_array
  # 여기에 코드 작성
end

generate_and_sort_array

 

4-1. 오름차순 정렬

def generate_and_sort_array
    array = Array.new(rand(1..20)) {rand(1..100)}
    sorted_array = array.sort

    puts "원래 배열 : #{array.inspect}"
    puts "정렬된 배열 : #{sorted_array.inspect}"
end

def generate_and_sort_array
    array = Array.new(rand(1..20)) {rand(1..100)}
    sorted_array = array.sort

    puts "원래 배열 : #{array.inspect}"
    puts "정렬된 배열 : #{sorted_array.inspect}"
end

generate_and_sort_array

array = Array.new(rand(1..20)) {rand(1..100)}  : 배열을 생성한다. 배열의 크기는 1 ~ 20까지 랜덤이고, 각 요소는 1 ~ 100까지 랜덤한 수이다.

sorted_array = array.sort  : 생성된 배열을 오름차순으로 정렬한다.

 

4-2. 내림차순 정렬

def ascendingOrder
    array = Array.new(rand(1..20)) {rand(1..100)}
    sorted_array = array.sort{|a, b| b <=> a}

    puts "원래 배열 : #{array.inspect}"
    puts "내림차순 배열 : #{sorted_array.inspect}"
end

sorted_array = array.sort{|a,b| b <=> a}  : 생성된 배열을 내림차순으로 정렬한다. b <=> 를 사용하여 순서를 반전시킨다.

 

4-3. 짝수 추출 후 오름차순 정렬

def evenSort
    array = Array.new(rand(1..20)){rand(1..100)}
    even_array = array.select{|num| num.even?}.sort

    puts "원래 배열 : #{array.inspect}"
    puts "짝수 추출 후 오름차순 정렬 : #{even_array.inspect}"
end

evenSort

even_array = array.select{|num| num.even?}.sort  : 배열에서 짝수만 선택한 후 오름차순으로 정렬한다.

 

4-4. 홀수 추출 후 내림차순 정렬

def oddSort
    array = Array.new(rand(1..20)){rand(1..100)}
    odd_array = array.select{|num| num.odd?}.sort.reverse

    puts "원래 배열 : #{array.inspect}"
    puts "홀수 추출 후 내림차순 정렬 : #{odd_array.inspect}"
end

oddSort

odd_array = array.select{|num| num.odd?}.sort.reverse  : 배열에서 홀수만 선택한 후 결과를 오름차순으로 정렬한뒤 반전시켜 내림차순으로 만든다.

 

 

 

728x90
반응형
LIST

'Ruby > Ruby-한국어' 카테고리의 다른 글

Ruby 메소드 - (6)  (0) 2023.08.30
Ruby 제어문 - (5)  (0) 2023.08.29
Ruby goormide 환경설정 - (1)  (0) 2023.08.29
Ruby 연산자 - (4)  (0) 2023.08.28
Ruby 변수와 상수 - (3)  (0) 2023.08.27