Skip to content

Instantly share code, notes, and snippets.

@zion830
zion830 / aac.kt
Last active August 19, 2020 11:29
fun main() {
while (true) {
val r = readLine()?.replace(",", "','")
var result = "["
result += r?.split(" ")?.joinToString("") {"{'$it'}, "}
result = result.dropLast(2) + "]"
println(result.replace("','", "', '"))
}
}

4장 재귀, 공재귀, 메모화

  • 재귀, 공재귀, 꼬리 재귀 함수의 구현 방법을 알아본다.
  • TCE를 사용해 꼬리 재귀 호출을 최적화한다.
  • 람다를 재귀적으로 만든다.
  • memorization을 적용해 계산 속도를 높인다.

4.1 공재귀와 재귀

  • 재귀(recursive) : 마지막 단계부터 계산을 시작한다.

개요

함수의 출력이 결정적이고, 외부 상태에 의존하지 않는다면 더 쉽게 테스트하고 함수의 성질을 잘 추론할 수 있다. 외부 세계와 상호작용 하는 것을 부수 효과라고 하는데, 순수 함수는 이러한 부수 효과 없이 오로지 인자에 의해서만 반환 값이 결정되는 함수를 의미한다. 즉 순수 함수는 참조 투명성을 지키는 함수다.

이번 장에서는 순수 함수를 계산에 사용하는 방법과 커리한(curried) 함수를 사용하는 방법을 배운다.

3.1 함수란 무엇인가

  • 함수의 정의
<script>
document.write('<div style="text-align: center; margin-top: 20px;">');
if (window.matchMedia('( min-width: 768px )').matches === true) {
document.write('<ins class="kakao_ad_area" style="display:none;" data-ad-unit = "DAN-rkzmjd4usdv8" data-ad-width = "160" data-ad-height = "600"></ins><script type="text/javascript" src="//t1.daumcdn.net/adfit/static/ad.min.js" async><\/script>');
}
document.write('</div>');
</script>
@zion830
zion830 / MainActivity.java
Created January 2, 2020 18:43
[Android] TTS Player 예제
package com.example.ttsplayer;
import android.graphics.Color;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.BackgroundColorSpan;
import android.view.View;
@zion830
zion830 / Register.java
Last active November 25, 2019 17:57
캐시메모리 시나리오 1, 시나리오 2
public class Register {
private Integer r1 = null;
private Integer r2 = null;
public Integer getR1() {
return r1;
}
public void setR1(Integer r1) {
this.r1 = r1;
@zion830
zion830 / Adder.java
Last active October 14, 2019 17:35
전가산기, 반가산기 만들어보기
public class Adder {
public boolean[] byteadder(boolean[] byteA, boolean[] byteB) {
boolean[] answer = new boolean[9];
boolean carry = false;
for (int i = 0; i < answer.length - 1; i++) {
boolean[] value = fulladder(byteA[i], byteB[i], carry);
answer[i] = value[1];
carry = value[0];
@zion830
zion830 / EndianConverter.kt
Last active October 14, 2019 17:35
big-endian, little-endian 변환하는 예제
import kotlin.experimental.and
object EndianConverter {
fun printConvertResult(testValue: Array<Long>) {
for (number in testValue) {
println("Input Value : 0x${Integer.toHexString(number.toInt())}")
val littleEndianArray = convertEndianSystem(number)
val littleEndianIntValue = bytesToInt(littleEndianArray)
@zion830
zion830 / Area.java
Last active November 25, 2019 15:49
NHN OPEN TALK DAY 문제풀이
package project;
public class Area {
private int num; // 지역 번호
private int x; // 중심의 x 좌표
private int y; // 중심의 y 좌표
private int radius; // 반지름
private enum Location {
ANOTHER_LOCATION, INSIDE, OUTSIDE
@zion830
zion830 / install_python.md
Last active March 25, 2019 12:03
파이썬 설치하기

Python 설치하기

다음 수업(3.28)부터는 Python 교육이 시작됩니다.

수업 당일 날 설치를 진행하면 시간이 많이 지체되기 때문에 아래 가이드에 따라 미리 파이썬을 설치해주세요.

1. 파이썬 설치 파일 다운받기

설치 링크에서 Download Python 3.7.2 클릭

2. .exe 파일 실행