Juwan Park :: '★프로그래밍/Ruby' 카테고리의 글 목록

'★프로그래밍/Ruby'에 해당되는 글 28

  1. 2016.08.28 직각삼각형 배열 값 채우기 예제
  2. 2016.08.26 퀵 정렬 (루비) 2편 1
  3. 2016.08.25 퀵 정렬 (루비) 1편
  4. 2016.08.25 병합 정렬 (루비)
  5. 2016.08.24 .sort 메소드로 안정 정렬 구현하기
  6. 2016.08.24 .shuffle - 배열의 원소들을 뒤섞는 메소드
  7. 2016.08.24 .sort 메소드 관련 보충 포스팅
  8. 2016.08.24 .sort - 배열의 값을 정렬하는 메소드
  9. 2016.08.20 99병의 맥주 (루비)
  10. 2016.08.19 예외 처리용 구문: rescue, ensure

직각삼각형 배열 값 채우기 예제

루비로 2차원 배열에 직각삼각형으로 값을 채우는 예제입니다. 정보처리기능사 실기 알고리즘 문제에 비슷한 문제가 있었는데요. 이 예제에서의 규칙은 다음과 같이 설정했습니다. 시작 값은 1입니다. 첫 행은 맨 마지막 열만 채웁니다. 두 번째 행은 맨 마지막의 두 열만 채우되, 맨 마지막 두 번째는 5, 맨 마지막은 9입니다. 세 번째 행은 맨 마지막의 세 열만 채우되, 맨 마지막 세 번째부터 13, 17, 21 순입니다. 이런 식으로 4씩 커지면서 직각삼각형으로 채워집니다. 이 규칙에 따른 코딩입니다. arr_size = 8 # 배열 크기 설정 # 배열과 채울 숫자를 미리 선언해 둡니다. arr = Array.new(arr_size) { Array.new(arr_size, 0) } fillnum = 1 0...

★프로그래밍/Ruby :: 2016. 8. 28. 23:03

퀵 정렬 (루비) 1편

루비로 퀵 정렬 알고리즘을 구현한 예제입니다.여기서는 기존의 교환식 퀵 정렬 대신 병합식 퀵 정렬로 구현하였습니다. 이는 퀵 정렬에 병합 정렬 알고리즘을 접목시킨 것으로, 교환식 퀵 정렬의 단점이었던 불안정성(정렬 키 값이 같은 데이터끼리 순서가 정렬 후 서로 바뀔 수 있는 성질)을 해소하였습니다.코드는 다음과 같습니다. def quick_sort(a, randompivot = true) return a if a.length

★프로그래밍/Ruby :: 2016. 8. 25. 22:35

병합 정렬 (루비)

루비에서 병합 정렬 알고리즘을 구현한 예제입니다. 우선 병합 정렬의 개념에 대해 먼저 설명드리자면, 정렬을 수행한 데이터를 반씩 쪼갠 다음 정렬 과정에서 다시 붙여나가는 정렬 방식입니다. 예를 들어, 배열 [4, 1, 2, 3]이 있다고 합시다. 그러면... 이 배열을 정렬하기 위해 반으로 쪼개 [4, 1] [2, 3]으로 만듭니다. 그리고 [4, 1]을 다시 쪼개 [4] [1]로 만들면, [4]는 원소가 하나이므로 더는 쪼갤 수 없고 [1]도 마찬가지로 더는 쪼갤 수 없습니다. 그러므로 이 둘의 값을 비교하여 정렬합니다. 1이 4보다 작으므로 당연히 1이 앞에 옵니다. 정렬되면서 4와 1로 쪼개진 게 다시 [1, 4]로 합쳐졌습니다.위 1번에서 쪼갠 나머지 반쪽인 [2, 3]도 위 2번~3번과 같은 방..

★프로그래밍/Ruby :: 2016. 8. 25. 12:36

.sort 메소드로 안정 정렬 구현하기

정렬 알고리즘에 대해 공부하다 보면 안정 정렬(stable sort)과 불안정 정렬(unstable sort)에 대해 들어 보신 적이 있을 것입니다. 이 둘의 차이가 무엇인지를 일단 간단히 설명드리자면, 정렬 키 값이 같은 데이터들에 대해 정렬 전의 순서가 정렬 후에도 유지될 것이 보장되면 안정 정렬이라고 하고, 키 값이 같은 데이터들의 순서가 정렬 후 서로 바뀔 가능성이 있으면 불안정 정렬이라고 합니다. 예를 들어, 배열이 [4, 4, 1, 6, 7, 9, 5, 8, 3, 2] 이렇게 처음에 똑같은 4가 두 개 있을 때 첫 번째 4가 정렬 후에도 항상 두 번째 4보다 앞에 있게 되면 안정 정렬이고, 첫 번째 4가 정렬 후에 두 번째 4보다 뒤로 갈 가능성이 있으면 불안정 정렬입니다. 그러면, 루비의 ...

★프로그래밍/Ruby :: 2016. 8. 24. 17:22

.shuffle - 배열의 원소들을 뒤섞는 메소드

이전 포스트에서 루비 프로그래밍에는 배열에 .sort 메소드가 있다는 글을 작성했습니다..sort 메소드는 별도의 알고리즘 구현 없이 원소들이 이리저리 뒤섞인 배열을 원소의 값대로 정렬해 주는 메소드라고 하였습니다. 그러면 정반대로 원소들을 이리저리 뒤섞는 메소드도 있을까요? 네. 있습니다.일단 아래 코드를 봅시다. arr = Array.new 1.upto(10) {|x| arr

★프로그래밍/Ruby :: 2016. 8. 24. 12:59

.sort - 배열의 값을 정렬하는 메소드

루비에서 사용하는 배열에는 특징이 있습니다.그 특징들 중 하나로, 자체적인 정렬 메소드를 제공한다는 점입니다.흔히 정렬 하면 정렬 알고리즘을 코드에 짜 넣는 경우가 일반적이지만, 루비에서는 정렬 메소드를 제공함으로써 배열의 정렬 알고리즘을 코딩하는 수고를 덜 수 있습니다.일단 다음 코드를 봅시다. arr = [4, 1, 2, 5, 3] (arr.length - 2).downto(0) do |x| 0.upto(x) do |y| arr[y], arr[y+1] = arr[y+1], arr[y] if arr[y] > arr[y+1] end end puts sprintf("%s", arr) 이 코드를 실행하면 맨 처음 [4, 1, 2, 5, 3]으로 세팅된 배열 arr를 오름차순 정렬하여 [1, 2, 3, 4, ..

★프로그래밍/Ruby :: 2016. 8. 24. 00:03

99병의 맥주 (루비)

프로그래밍 예제 중 Hello, world!와 더불어 유명한 '99병의 맥주'(99 bottles of beer)입니다.99병의 맥주는 반복문과 분기문을 연습해 보기 위한 예제로 유명한데요.루비에서는 다음과 같이 매우 간단하게 구현할 수 있습니다. 99.downto(1) do |x| puts sprintf("%d병의 맥주가 벽장에 있네, %d병의 맥주가 있네.", x, x) x > 1 ? c = sprintf("%d병의 맥주가 벽장에 있네.", x - 1) : c = "더 이상 벽장에 맥주는 없네." puts sprintf("한 병을 내려서 넘겼다네. %s", c) puts end puts "더 이상 맥주가 벽장에 없네. 맥주는 더 이상 없네." puts "가게에 가서 다시 사왔네. 99병의 맥주가 벽장..

★프로그래밍/Ruby :: 2016. 8. 20. 20:06

예외 처리용 구문: rescue, ensure

루비 프로그램에서 오류가 발생할 경우를 대비하여 예외처리를 하기 위한 구문으로는 rescue와 ensure가 있습니다.여기서 오류라 함은 구조적으로는 문제가 없으나 상황에 따라 발생할 수 있는 오류(예를 들자면, 처리하려던 파일이 갑자기 없어졌다거나...)를 말하는 것으로, 구문 오류와 같이 구조적으로 문제가 있는 경우는 이에 해당하지 않습니다.일단 다음 코드를 봅시다. 10.downto(0) do |x| puts 240 / x end 이 코드를 실행하면, 제수가 될 x의 값이 0까지 감소하기 때문에 반복처리로 x의 값이 0까지 내려가는 순간 2번 줄은 240÷0이 되어버려 오류를 일으키게 됩니다.이 코드를 다음과 같이 바꿔 봅시다. 10.downto(0) do |x| begin puts 240 / x ..

★프로그래밍/Ruby :: 2016. 8. 19. 16:44
1 2 3
Today    Yday    Tot
Juwan Park
Juwan Park's blog is powered by Daum and .
Contemporary Blue for .
Designed by Juwan Park. Creative Commons License
▲ TOP