170307_TIL

|

오늘 한 일

  • 기초 알고리즘 문제를 풀었다.
  • 첫 장고 개인프로젝트로 만들었던 메모 사이트를 개선해 보려고 한다. 인증(회원가입,로그인,로그아웃) 기능과 북마크, 정렬기준에 따른 정렬방식 변경 기능을 넣는게 목표다. 오늘은 회원가입, 로그인 기능을 가이드 문서를 보고 추가했는데, 더 쉬운 방법이 있는 것 같다. 그래도 강의를 본게 아니라 직접 문서만 보고 구현했다는 점에서 성취감이 컸다.

내일 할 일

  • 로그아웃, 정보수정 기능 만들기
  • 장고강의 듣기
  • 점프투파이썬 읽기 (딕셔너리, 튜플 자료형)
  • 장고걸스 가이드 읽기

level 1. 수박수박수박수박수박수? (java, python)

|

level 1. 수박수박수박수박수박수?

출처

문제

water_melon함수는 정수 n을 매개변수로 입력받습니다. 길이가 n이고, 수박수박수…와 같은 패턴을 유지하는 문자열을 리턴하도록 함수를 완성하세요.

예를들어 n이 4이면 ‘수박수박’을 리턴하고 3이라면 ‘수박수’를 리턴하면 됩니다.

풀이 (python)

def water_melon(n):
    return ("수박"*n)[:n]

# 실행을 위한 테스트코드입니다.
print("n이 3인 경우: " + water_melon(3));
print("n이 4인 경우: " + water_melon(4));

풀이 (java)

public class WaterMelon {
	public String watermelon(int n){
    String result="";

		for(int i=1; i<n+1; i++){
      result += (i % 2 == 1)? "수" : "박";
			}
    return result;
	}

	// 실행을 위한 테스트코드입니다.
	public static void  main(String[] args){
		WaterMelon wm = new WaterMelon();
		System.out.println("n이 3인 경우: " + wm.watermelon(3));
		System.out.println("n이 4인 경우: " + wm.watermelon(4));
	}
}

다른사람 풀이(java)

public class WaterMelon {
    public String watermelon(int n){
        StringBuffer sf = new StringBuffer();
        for (int i=1; i<=n; ++i) {
            sf.append(i%2==1?"수":"박");
        }
        return sf.toString();
    }

    // 실행을 위한 테스트코드입니다.
    public static void  main(String[] args){
        WaterMelon wm = new WaterMelon();
        System.out.println("n이 3인 경우: " + wm.watermelon(3));
        System.out.println("n이 4인 경우: " + wm.watermelon(4));
    }
}
public class WaterMelon {
	public String watermelon(int n){
		String repeated = new String(new char[n]).replace("\0", "수박");
    return repeated.substring(0,n);
	}

	// 실행을 위한 테스트코드입니다.
	public static void  main(String[] args){
		WaterMelon wm = new WaterMelon();
		System.out.println("n이 3인 경우: " + wm.watermelon(3));
		System.out.println("n이 4인 경우: " + wm.watermelon(4));
	}
}

배운점

  • 슬라이싱 기능을 잘 활용하자
  • java 3항 연산자
  • replace 메소드
  • StringBuffer 클래스 (String클래스와 달리 동적 문자열을 처리하는 클래스)
  • toString 메소드

level 1. 자릿수더하기

|

level 1. 자릿수더하기

출처

문제

sum_digit함수는 자연수를 전달 받아서 숫자의 각 자릿수의 합을 구해서 return합니다. 예를들어 number = 123이면 1 + 2 + 3 = 6을 return하면 됩니다. sum_digit함수를 완성해보세요.

풀이 (python)

# 풀이1
def sum_digit(number):
	result = 0
	for i in str(number):
		result += int(i)
	return result

# 풀이2
def sum_digit(number):
  from functools import reduce
  return reduce(lambda x,y:int(x)+int(y), str(number))

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(sum_digit(123)));


다른사람 풀이

def sum_digit(number):
    return sum([int(i) for i in str(number)])

# map 활용
def sum_digit(number):
    return sum(map(int, str(number)))

배운점

  • for in 반복문은 iterable한 오브젝트만 대상으로 할 수 있다.
  • int()를 통해서 string을 정수로 변환한다.

level 1. 삼각형출력하기 (java, python)

|

level 1. 삼각형출력하기

출처

문제

printTriangle 메소드는 양의 정수 num을 매개변수로 입력받습니다. 다음을 참고해 *(별)로 높이가 num인 삼각형을 문자열로 리턴하는 printTriangle 메소드를 완성하세요 printTriangle이 return하는 String은 개행문자(‘\n’)로 끝나야 합니다.

풀이 (python)

def printTriangle(num):
	s = ""
	for i in range(num):
		s += '*'*(i+1)+'\n'
	return s

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( printTriangle(3) )

다른사람 풀이

def printTriangle(num):
    return ''.join(['*'*i + '\n' for i in range(1,num+1)])

배운점

  • ’‘.join(List) 를 통해서 리스트의 각 요소를 그대로 붙여서 스트링으로 만들 수 있다.

풀이 (java)

public class PrintTriangle {
  public String printTriangle(int num){
    String result = "";
    for(int i=1; i<=num; i++){
      String star = new String(new char[i]).replace("\0", "*");
      result += star + "\n";
    }
    return result;
  }

  // 아래는 테스트로 출력해 보기 위한 코드입니다.
  public static void main(String[] args) {
    PrintTriangle pt = new PrintTriangle();
    System.out.println(pt.printTriangle(3) );
  }
}

다른사람 풀이

public class PrintTriangle {
    public String printTriangle(int num){
      String result = "";
      String stars = "*";
      for(int i=0; i<num; ++i){
          result += stars+"\n";
          stars += "*";
      }
      return result;
    }

    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        PrintTriangle pt = new PrintTriangle();
        System.out.println( pt.printTriangle(3) );
    }
}

배운점

  • String 클래스의 replace 메소드

level 1. 정수제곱근판별하기

|

level 1. 정수제곱근판별하기

출처

문제

nextSqaure함수는 정수 n을 매개변수로 입력받습니다. n이 임의의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 임의의 정수 x의 제곱이 아니라면 ‘no’을 리턴하는 함수를 완성하세요. 예를들어 n이 121이라면 이는 정수 11의 제곱이므로 (11+1)의 제곱인 144를 리턴하고, 3이라면 ‘no’을 리턴하면 됩니다.

풀이 (python)

# 풀이 1
import math
def nextSqure(n):
    return pow(math.sqrt(n)+1, 2) if int(math.sqrt(n)) == math.sqrt(n) else 'no'

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(nextSqure(121)));

# 풀이 2
def nextSqure(n):
    for i in range(1,n//2):
        if i * i == n:
            return (i + 1) ** 2
        if i * i > n:
            return 'no'

# 풀이 3
def nextSqure(n):
    t = int(pow(n, 0.5))
    return (t+1)**2 if t**2==n else 'no'

# 참고 - 제곱근을 구하는 여러가지 방법
# n ** 5
# pow(n, 0.5)
# math.sqrt(n)

다른사람 풀이

def nextSqure(n):
    sqrt = n ** (1/2)

    if sqrt % 1 == 0:
        return (sqrt + 1) ** 2
    return 'no'
def nextSqure(n):
    sqrt = pow(n, 0.5)
    return pow(sqrt + 1, 2) if sqrt == int(sqrt) else 'no'

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(nextSqure(121)));

배운점

  • 파이썬 삼항 연산자 (conditional expressions)을 활용하니 짧게 코드를 짤 수 있었다.
  • 제곱근을 구하려면 import math 를 통해서 모듈을 임포트하고 math.sqrt() 함수를 통해서 제곱근을 구할 수 있다.
  • int() 를 통해서 주어진 인수를 정수로 변환할 수 있다.
  • pow(4,2)4 ** 2 (=16) 을 통해서 제곱 연산을 할 수 있다.
  • 반대로 pow(4,0.5)4 ** 1/2 (=2) 을 통해서 제곱근을 구할 수 있다.