Ruby Examples

This commit is contained in:
2026-01-15 14:01:21 +09:00
commit cf3d7d3296
76 changed files with 1191 additions and 0 deletions

58
.gitignore vendored Normal file
View File

@@ -0,0 +1,58 @@
### Ruby template
*.gem
*.rbc
/.config
/coverage/
/InstalledFiles
/pkg/
/spec/reports/
/spec/examples.txt
/test/tmp/
/test/version_tmp/
/tmp/
# Used by dotenv library to load environment variables.
# .env
# Ignore Byebug command history file.
.byebug_history
## Specific to RubyMotion:
.dat*
.repl_history
build/
*.bridgesupport
build-iPhoneOS/
build-iPhoneSimulator/
## Specific to RubyMotion (use of CocoaPods):
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# vendor/Pods/
## Documentation cache and generated files:
/.yardoc/
/_yardoc/
/doc/
/rdoc/
## Environment normalization:
/.bundle/
/vendor/bundle
/lib/bundler/man/
# for a library or gem, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# Gemfile.lock
# .ruby-version
# .ruby-gemset
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
# .rubocop-https?--*

10
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,10 @@
# 디폴트 무시된 파일
/shelf/
/workspace.xml
# 쿼리 파일을 포함한 무시된 디폴트 폴더
/queries/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# 에디터 기반 HTTP 클라이언트 요청
/httpRequests/

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ruby-examples.iml" filepath="$PROJECT_DIR$/.idea/ruby-examples.iml" />
</modules>
</component>
</project>

15
.idea/ruby-examples.iml generated Normal file
View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="RUBY_MODULE" version="4">
<component name="ModuleRunConfigurationManager">
<shared />
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
</content>
<orderEntry type="jdk" jdkName="ruby-4.0.0-p0" jdkType="RUBY_SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

119
README.md Normal file
View File

@@ -0,0 +1,119 @@
# 루비 연습 문제
## 1단계: 루비 기초 감각 익히기 (초급 입문)
**목표**: 문법, 출력, 변수, 제어문에 익숙해지기
1. `"Hello, Ruby!"`를 출력하는 프로그램 작성
2. 이름을 변수에 저장하고 `"안녕하세요, 이름님"` 출력
3. 두 정수를 변수로 받아 합, 차, 곱, 몫 출력
4. 숫자를 입력받아 짝수/홀수 판별
5. 점수(0~100)를 받아 A/B/C/D/F 등급 출력
6. 1부터 100까지 출력 (for, while 각각 사용)
7. 1~100 중 3의 배수만 출력
8. 사용자 입력이 `"exit"`이면 종료되는 루프 작성
9. 구구단 2단 출력
10. 구구단 전체 출력
---
## 2단계: 메서드와 조건 분기 (초급)
**목표**: 메서드 정의, 리턴값, 재사용
11. 두 수를 받아 더한 값을 반환하는 메서드 작성
12. 세 수 중 최댓값을 반환하는 메서드
13. 숫자를 받아 절댓값을 반환하는 메서드
14. 문자열을 받아 길이를 반환하는 메서드
15. 원의 반지름을 받아 넓이를 계산하는 메서드
16. 나이를 받아 성인/미성년자 판별 메서드
17. 문자열과 반복 횟수를 받아 반복 출력하는 메서드
18. BMI 계산 메서드 작성
19. 비밀번호 길이가 8자 이상인지 검사하는 메서드
20. 윤년 여부를 판단하는 메서드
---
## 3단계: 배열(Array)과 반복 (초급 → 중급)
**목표**: 컬렉션과 반복 처리에 익숙해지기
21. 숫자 배열의 합을 구하기
22. 배열에서 최댓값, 최솟값 찾기
23. 배열 요소를 하나씩 출력 (each 사용)
24. 배열의 짝수만 출력
25. 문자열 배열에서 글자 수가 5 이상인 단어만 출력
26. 배열 요소를 모두 대문자로 변환
27. 배열에서 특정 값이 있는지 검사
28. 배열의 평균값 구하기
29. 중복 제거된 배열 만들기
30. 배열을 오름차순/내림차순 정렬
---
## 4단계: 해시(Hash) 다루기 (중급 초입)
**목표**: 키-값 구조 이해
31. 사람의 이름과 나이를 해시로 표현
32. 해시에서 특정 키의 값 출력
33. 모든 키와 값을 `"이름: 나이"` 형식으로 출력
34. 가장 나이가 많은 사람 찾기
35. 점수 해시에서 평균 점수 계산
36. 해시에 새로운 요소 추가
37. 해시에서 특정 조건(나이 ≥ 30)인 항목만 출력
38. 해시 키 목록만 배열로 추출
39. 해시 값 목록만 배열로 추출
40. 단어 빈도수 계산 프로그램
---
## 5단계: 블록과 Enumerable (중급)
**목표**: 루비스러운 코드 작성
41. `map`을 사용해 배열의 제곱값 배열 생성
42. `select`로 조건에 맞는 값 필터링
43. `reject`로 특정 조건 제거
44. `reduce`로 배열 합계 계산
45. 문자열 배열을 하나의 문자열로 합치기
46. 배열에서 가장 긴 문자열 찾기
47. 해시를 배열로 변환
48. 배열을 해시로 변환 (index → 값)
49. `each_with_index` 사용
50. 사용자 정의 메서드에 블록 전달하기
---
## 6단계: 문자열 처리 (중급)
**목표**: 텍스트 처리 감각 익히기
51. 문자열에서 모음 개수 세기
52. 문자열 뒤집기
53. 특정 문자 제거
54. 공백 기준으로 단어 분리
55. 단어 수 세기
56. 문자열이 회문인지 검사
57. 이메일 형식 간단 검증
58. 파일명에서 확장자 추출
59. snake_case → camelCase 변환
60. 문자열 압축 (aaabb → a3b2)
---
## 7단계: 객체지향 기초 (중급)
**목표**: 클래스와 객체 개념 이해
61. Person 클래스 정의 (이름, 나이)
62. 인스턴스 메서드 작성
63. 생성자(`initialize`) 사용
64. 접근자(`attr_accessor`) 사용
65. 나이 증가 메서드
66. 여러 Person 객체를 배열로 관리
67. 클래스 메서드 작성
68. 간단한 BankAccount 클래스
69. 입금/출금 기능 구현
70. 잔액 부족 예외 처리

10
level1/01.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
`"Hello, Ruby!"`를 출력하는 프로그램 작성
=end
puts "Hello, Ruby!"
# puts는 개행 포함 출력

11
level1/02.rb Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
이름을 변수에 저장하고 `"안녕하세요, 이름님"` 출력
=end
name = "홍길동"
puts "안녕하세요, #{name}님."
# 루비는 #{} 문자열 보간 사용

17
level1/03.rb Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
두 정수를 변수로 받아 합, 차, 곱, 몫 출력
=end
print "숫자 1: "
number1 = gets.chomp.to_i
print "숫자 2: "
number2 = gets.chomp.to_i
puts "#{number1} + #{number2} = #{number1 + number2}"
puts "#{number1} - #{number2} = #{number1 - number2}"
puts "#{number1} * #{number2} = #{number1 * number2}"
puts "#{number1} / #{number2} = #{number1 / number2}"
puts "#{number1} % #{number2} = #{number1 % number2}"

11
level1/04.rb Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
숫자를 입력받아 짝수/홀수 판별
=end
print "숫자 : "
number = gets.chomp.to_i
puts number.even? ? "짝수" : "홀수"

23
level1/05.rb Executable file
View File

@@ -0,0 +1,23 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
점수(0~100)를 받아 A/B/C/D/F 등급 출력
=end
print "점수(0~100) : "
number = gets.chomp.to_i
grade = case number
when 90..100
"A"
when 80..89
"B"
when 70..79
"C"
when 60..69
"D"
else
"F"
end
puts "#{number}점은 #{grade} 등급입니다."

19
level1/06.rb Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
1부터 100까지 출력 (for, while 각각 사용)
=end
for i in 1..100
puts i
end
i = 1
while i <= 100 do
puts i
i += 1
end
(1..100).each { |item| puts item }

11
level1/07.rb Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
1~100 중 3의 배수만 출력
=end
(1..100).each do |item|
puts item if (item % 3 == 0)
end

12
level1/08.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
사용자 입력이 `"exit"`이면 종료되는 루프 작성
=end
loop do
print "입력 : "
break if gets.chomp == "exit"
end

11
level1/09.rb Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
구구단 2단 출력
=end
(1..9).each do |item|
puts "2 * #{item} = #{2 * item}"
end

14
level1/10.rb Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
구구단 전체 출력
=end
(2..9).each do |i|
(1..9).each do |j|
puts "#{i} * #{j} = #{i * j}"
end
puts
end

17
level2/11.rb Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
두 수를 받아 더한 값을 반환하는 메서드 작성
=end
def add(a, b)
a + b
end
print "숫자 1: "
number1 = gets.chomp.to_i
print "숫자 2: "
number2 = gets.chomp.to_i
puts "#{number1} + #{number2} = #{add(number1, number2)}"

12
level2/12.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
세 수 중 최댓값을 반환하는 메서드
=end
def max(a, b, c)
[a, b, c].max
end
puts "Max = #{max(5, 2, 9)}"

12
level2/13.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
숫자를 받아 절댓값을 반환하는 메서드
=end
def abs(a)
a.abs
end
puts "Abs = #{abs(-7)}"

14
level2/14.rb Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열을 받아 길이를 반환하는 메서드
=end
def len(s)
s.length
end
print "?"
s = gets.chomp
puts "#{s}의 길이는 #{len(s)}"

12
level2/15.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
원의 반지름을 받아 넓이를 계산하는 메서드
=end
def area(r)
Math::PI * r ** 2
end
puts "Area = #{area(2)}"

12
level2/16.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
나이를 받아 성인/미성년자 판별 메서드
=end
def adult?(age)
age >= 20
end
puts adult?(13) ? "성인입니다." : "미성년자입니다."

12
level2/17.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열과 반복 횟수를 받아 반복 출력하는 메서드
=end
def repeat(s, i)
s * i
end
puts repeat("도깨비", 6)

16
level2/18.rb Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
BMI 계산 메서드 작성
=end
def bmi(kg, cm)
weight = kg.to_f
height = cm.to_f / 100
weight / (height ** 2)
end
puts "BMI = #{bmi(70, 170)}" # 24.22
puts "BMI = #{bmi(75, 175)}" # 24.5

12
level2/19.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
비밀번호 길이가 8자 이상인지 검사하는 메서드
=end
def password_valid?(pw)
pw.length >= 8
end
puts password_valid?("dfjirgaofmrioa") ? "OK" : "Nope"

19
level2/20.rb Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
윤년 여부를 판단하는 메서드
## 윤년의 조건
1. 서력 기원 연수가 004로 나누어 떨어지는 해는 윤년으로 한다.
2. 서력 기원 연수가 100으로 나누어 떨어지는 해는 평년으로 한다.
3. 서력 기원 연수가 400으로 나누어 떨어지는 해는 윤년으로 둔다.
=end
def leap_year?(year)
year %4 == 0 && (year %100 != 0 || year %400 == 0)
end
puts leap_year?(2000) ? "윤년" : "평년"
puts leap_year?(2020) ? "윤년" : "평년"
puts leap_year?(2025) ? "윤년" : "평년"

10
level3/21.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
숫자 배열의 합을 구하기
=end
arr = [1,3,5,7,9]
puts arr.sum

11
level3/22.rb Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열에서 최댓값, 최솟값 찾기
=end
arr = [5, 7, 4, 3, 2, 9, 1, 6]
puts "Min = #{arr.min}"
puts "Max = #{arr.max}"

10
level3/23.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열 요소를 하나씩 출력 (each 사용)
=end
arr = [5, 7, 4, 3, 2, 9, 1, 6]
arr.each { |i| puts i }

16
level3/24.rb Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열의 짝수만 출력
=end
arr = [5, 7, 4, 3, 2, 9, 1, 6]
arr.each do |num|
puts num if num.even?
end
# select 필터 사용
arr.select { |v| v.even? }
.each { |v| puts v }

12
level3/25.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열 배열에서 글자 수가 5 이상인 단어만 출력
=end
arr = %w[this is a test array]
# select 필터 사용
arr.select { |v| v.length >= 5 }
.each { |v| puts v }

12
level3/26.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열 요소를 모두 대문자로 변환
=end
arr = %w[this is a test array]
# select 필터 사용
arr.map { |v| v.upcase }
.each { |v| puts v }

10
level3/27.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열에서 특정 값이 있는지 검사
=end
arr = %w[this is a test array]
puts arr.include?("hash") ? "Yes" : "No"

10
level3/28.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열의 평균값 구하기
=end
arr = [5, 7, 4, 3, 2, 9, 1, 6]
puts arr.sum / arr.size.to_f

10
level3/29.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
중복 제거된 배열 만들기
=end
arr = [5, 7, 4, 3, 2, 9, 1, 6, 2, 9, 1, 6, 7, 4, 3, 2, 9]
puts arr.uniq

12
level3/30.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열을 오름차순/내림차순 정렬
=end
arr = [5, 7, 4, 3, 2, 9, 1, 6]
puts arr.sort
puts arr.sort.reverse

10
level4/31.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
사람의 이름과 나이를 해시로 표현
=end
person = { name: "Charlie", age: 13 }
puts person

10
level4/32.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
해시에서 특정 키의 값 출력
=end
person = { name: "Charlie", age: 13 }
puts person[:name]

18
level4/33.rb Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
모든 키와 값을 "이름: 나이" 형식으로 출력
=end
person = { name: "Charlie", age: 13 }
person.each do |key, value|
puts "#{key}: #{value}"
end
people = [{ name: "Charlie", age: 13 },
{ name: "Steve", age: 34 },
{ name: "Anne", age: 23 }]
people.each { |item| puts "#{item[:name]}: #{item[:age]}"}

14
level4/34.rb Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
가장 나이가 많은 사람 찾기
=end
people = [{ name: "Charlie", age: 13 },
{ name: "Steve", age: 34 },
{ name: "Anne", age: 23 }]
person = people.max_by { |_| _[:age] }
puts person[:name]

14
level4/35.rb Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
점수 해시에서 평균 점수 계산
=end
people = [{ name: "Charlie", score: 13 },
{ name: "Steve", score: 34 },
{ name: "Anne", score: 23 }]
avg = people.sum { |_| _[:score] } / people.length.to_f
puts avg

12
level4/36.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
해시에 새로운 요소 추가
=end
person = { name: "Charlie", score: 13 }
person[:address] = "Seoul"
puts person

13
level4/37.rb Executable file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
해시에서 특정 조건(나이 ≥ 30)인 항목만 출력
=end
people = [{ name: "Charlie", score: 13 },
{ name: "Steve", score: 34 },
{ name: "Anne", score: 23 }]
people.select { |item| item[:score] >= 30 }
.each { |item| puts "#{item[:name]}: #{item[:score]}" }

12
level4/38.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
해시 키 목록만 배열로 추출
=end
person = { name: "Charlie", score: 13 }
keys = person.keys
puts keys

12
level4/39.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
해시 값 목록만 배열로 추출
=end
person = { name: "Charlie", score: 13 }
keys = person.values
puts keys

13
level4/40.rb Executable file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
단어 빈도수 계산 프로그램
=end
words = "This is a test This is only a test".downcase.split(" ")
result = Hash.new
words.each { |w| result[w] = result[w]?result[w]+1:1}
puts result

10
level5/41.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
map을 사용해 배열의 제곱값 배열 생성
=end
array = [2, 3, 5, 7, 9]
puts array.map { |item| item ** 2 }

10
level5/42.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
select로 조건에 맞는 값 필터링
=end
array = [2, 3, 5, 7, 9]
puts array.select { |item| item.odd? }

10
level5/43.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
reject로 특정 조건 제거
=end
array = [2, 3, 5, 7, 9]
puts array.reject { |item| item.even? }

10
level5/44.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
reduce로 배열 합계 계산
=end
array = [2, 3, 5, 7, 9]
puts array.reduce { |sum,item| sum += item }

10
level5/45.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열 배열을 하나의 문자열로 합치기
=end
array = ["Hello", "World"]
puts array.join(" ")

12
level5/46.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열에서 가장 긴 문자열 찾기
=end
array = %w[This is a Hello Ruby examples]
word = array.max_by{ |str| str.length }
puts word

10
level5/47.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
해시를 배열로 변환
=end
person = { name: "Charlie", age: 13 }
puts person.to_a

11
level5/48.rb Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
배열을 해시로 변환 (index → 값)
=end
people = ["Charlie", "Steve", "Anne"]
i = 0
puts people.map { |e| { name: e, index: i = i + 1 } }

12
level5/49.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
each_with_index 사용
=end
people = ["Charlie", "Steve", "Anne"]
h = people.each_with_index.to_h
puts h

12
level5/50.rb Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
사용자 정의 메서드에 블록 전달하기
=end
def my_method
puts yield if block_given?
end
my_method {"Hello, Ruby!"}

10
level6/51.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열에서 모음 개수 세기
=end
str = "Hello World"
puts str.count("aeiou")

10
level6/52.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열 뒤집기
=end
str = "Hello World"
puts str.reverse

10
level6/53.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
특정 문자 제거
=end
str = "Hello World"
puts str.delete("aeiou")

10
level6/54.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
공백 기준으로 단어 분리
=end
str = "Hello World"
puts str.split

10
level6/55.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
단어 수 세기
=end
str = "Hello World"
puts str.split.count

10
level6/56.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열이 회문인지 검사
=end
str = "Hello World"
puts str == str.reverse

14
level6/57.rb Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
이메일 형식 간단 검증
=end
str = "hello@examples.com"
puts str =~ /\A\S+@\S+\.\S+\z/ ? "Valid" : "Invalid"
# ---
puts str.match?(/\A\S+@\S+\.\S+\z/) ? "Valid" : "Invalid"

10
level6/58.rb Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
파일명에서 확장자 추출
=end
str = "hello.txt"
puts File.extname(str)

19
level6/59.rb Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
snake_case → camelCase 변환
=end
str = "hello_world"
puts str.split("_")
.map { |s| s.capitalize}
.join
# ---
x = str.gsub(/_[a-z]/) do |s|
s.to_s.delete("_").upcase
end
puts x

13
level6/60.rb Executable file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
문자열 압축 (aaabb → a3b2)
=end
str = "hello world"
puts str.chars
.chunk{|c| c.itself}
.map{|c,a| "#{c}#{a.size}"}.join

19
level7/61.rb Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
Person 클래스 정의 (이름, 나이)
=end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
charlie = Person.new("Charlie", 13)
p charlie
puts charlie.name

22
level7/62.rb Executable file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
인스턴스 메서드 작성
=end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def hello
puts "Hello, I'm #{name}!"
end
end
charlie = Person.new("Charlie", 13)
puts charlie.hello

19
level7/63.rb Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
생성자(initialize) 사용
=end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
charlie = Person.new("Charlie", 13)
puts charlie.hello

19
level7/64.rb Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
접근자(attr_accessor) 사용
=end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
end
charlie = Person.new("Charlie", 13)
puts charlie.hello

23
level7/65.rb Executable file
View File

@@ -0,0 +1,23 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
나이 증가 메서드
=end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def grow_up
@age += 1
end
end
charlie = Person.new("Charlie", 13)
charlie.grow_up
p charlie

25
level7/66.rb Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
여러 Person 객체를 배열로 관리
=end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def grow_up
@age += 1
end
end
people = [
Person.new("Charlie", 13),
Person.new("Steve", 48),
Person.new("Anne", 34)
]

24
level7/67.rb Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
클래스 메서드 작성
=end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def self.species
"Homo Sapiens"
end
end
puts Person.species
charlie = Person.new("Charlie", 13)
puts charlie.class.species

24
level7/68.rb Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
간단한 BankAccount 클래스
=end
class BankAccount
def initialize(balance)
@balance = balance
end
def deposit(amount)
@balance += amount
end
def withdraw(amount)
@balance -= amount
end
def get_balance
@balance
end
end

24
level7/69.rb Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
간단한 BankAccount 클래스
=end
class BankAccount
def initialize(balance)
@balance = balance
end
def deposit(amount)
@balance += amount
end
def withdraw(amount)
@balance -= amount
end
def get_balance
@balance
end
end

35
level7/70.rb Executable file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
=begin
잔액 부족 예외 처리
=end
class BankAccount
def initialize(balance)
@balance = balance
end
def deposit(amount)
@balance += amount
end
def withdraw(amount)
begin
raise StandardError if @balance < amount
@balance -= amount
rescue
puts "잔액이 부족합니다."
@balance
end
end
def get_balance
@balance
end
end
account = BankAccount.new(100)
puts account.withdraw(99)
puts account.withdraw(5)