728x90
반응형

사내 스터디에서 TDD를 배워봤다. 

앞으로 고랭 문제나 모듈 개발할 때 TDD를 활용하면 좋겠다고 생각했다.

 

그래서 이번 주 스터디 문제를 TDD로 풀어보았다. 다행히 이번 주 스터디 리더가 쉬운 문제를 내서 TDD로 풀어볼 만했다.

문제는 아주 간단하다. 

문제링크

 

코딩테스트 연습 - 내적

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의

programmers.co.kr

입출력 예만 간단히 보여주자면 아래와 같다. 

 

나는 이제 이 문제를 그냥 접근해 볼 수도 있었지만 TDD를 활용해 test 코드를 작성하고 풀어보았다.

import (
	"testing"
	"github.com/stretchr/testify/assert"
)

우선 위 두 라이브러리를 import 해서 test 코드를 작성할 수 있도록 해주었다.

그리고 아래와 같이 전체 테스트 코드를 작성해 보았다. 조건이 두 가지뿐이었고 예시 케이스로만 테스트해도 모두 통과하기 때문에 두 예시에 대한 테스트 코드만 작성했다. 

전체 코드

package study_0603_1

import (
	"testing"
	"github.com/stretchr/testify/assert"
)

func Test1(t *testing.T) {
	a := []int{1, 2, 3, 4}
	b := []int{-3, -1, 0, 2}
	assert.Equal(t, 3, solution(a, b))
}

func Test2(t *testing.T) {
	a := []int{-1,0,1}
	b := []int{1, 0, -1}
	assert.Equal(t, -2, solution(a, b))
}

이 테스트 코드에 맞게 main 코드를 작성했다.

solution 코드

package study_0603_1

func solution(a []int, b []int) int {
	ret := 0
	for idx, _ := range a{
		ret += a[idx] * b[idx]
	}
	return ret
}

간단하네!?

 

끝!

728x90
반응형
728x90
반응형

Jps 는 자바로 실행되는 java virtual machine process를 보여주는 명령어이다.

 

이번에 하둡으로 맵리듀스 잡 실행해보며 하둡 클러스터 잘 도는지 확인하려 jps 명령어 써보면서 간단히 정리해본다.

 

데이터노즈, 네임노드, 리소스 매니저 등등 잘 돌고 있었고 이제 테스트가 끝나서 종료하려고 ./stop-all.sh 명령어를 넣었는데 java virtual machine에서는 종료가 안된건지 자꾸 남아서 직접 Kill 해 주어야 했다.

참고로 앞에 23240 등 다섯 자리 숫자가 Pid 임.

 

직접 kill 할 때는 

> kill -9 pid

써주어 종료시킬 수 있다.

이렇~~~게!

 

간단하쥬~?

728x90
반응형
728x90
반응형

Jetbrains의 Goland IDE 설치와 사용

 

www.jetbrains.com/go/

 

GoLand: A Clever IDE to Go by JetBrains

GoLand is an IDE by JetBrains aimed at providing an ergonomic environment for Go development.

www.jetbrains.com

1. 먼저 위 사이트로 이동해 고랜드를 다운받는다.

2. 다운받은 고랜드를 실행하면 계정 인증(activate)을 하라는데 나는 회사계정으로 로그인했더니 아래와 같이 나왔다.

 

3. 'New Project' 누르고 프로젝트 이름 설정

4. new -> Go file -> main.go 생성

case sensitive 하니 소문자로 해야한다.

  이 때 환경에 golang이 설치되어 있지 않으면 'GOROOT is not defined' 라는 워닝이 나타난다. 

  homebrew로 golang을 설치해야한다.

5. 'main.go'에 예제 코드 작성


 

이러고 실행이 계속 안돼서 찾아보다가 main package 를 만들어야 한다는 에러를 보고 configuration 수정하여 프로젝트를 main 이라는 package 이름으로 refactor 해 주었고 그러고 나니 "Hello World!" 가 나왔다...!!

 

6. go_test(다른 테스트 하다가 test 로 새로 만든 환경임)를 refactor 통해 main package로 바꿔줌

  또는 아래와 같이 depth 추가하여 package 생성

 

주의: 프로젝트 생성 시에 GOROOT 설정

728x90
반응형
728x90
반응형

프로그래머스 level1 문자열 다루기 기본 golang 풀이

 

요즘에는 golang을 공부하고 있다. 간단하게 프로그래머스 쉬운 문제들을 풀어보고 있는데 syntax에 익숙하지 않으니 좀 어렵기도 하다.

 

제일 쉬워보이는 문제 풀면서 문자열 좀 익숙해 지려고 해봤다. 아래는 문제 캡쳐이고,

 

아래는 내가 아스키 코드 사용하여 풀이한 코드이다. 아스키 코드 모를 때는 직접 찍어보면 된다. 다른 모듈 Import한 것 없이 길이 확인하고 숫자만 있는지 확인하고 return해준다.

func solution(s string) bool {
    if len(s) == 4 || len(s) == 6{
        for i := 0; i < len(s); i++ {
            if 48 <= s[i] && s[i] <= 57 {
                continue
            } else{
                return false
            }
        }
    }else{
        return false
    }
    return true
}

 

아래는 다른 사람의 풀이인데 strconv라는 모듈을 Import 하여 풀었다. C언어에서도 많이 봤듯이 atoi 사용하여 string to int 해주었다. 그리고 err 변수 사용하여 에러 있는지도 받아주어 에러 메시지가 들어오면 return false해주고 아니라면 true 하여 간단하게 구현했다.

import "strconv"

func solution(s string) bool {
    _, err := strconv.Atoi(s)
    if err != nil || len(s) != 4 && len(s) != 6 {return false}
    return true
}

 

고랭은 어려워~.~

728x90
반응형
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/12939

 

코딩테스트 연습 - 최댓값과 최솟값

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 (최소값) (최대값)형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를

programmers.co.kr

 

#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdlib>
#include <stdlib.h>

using namespace std;

vector<string> split(string input, char delimiter) {
    vector<string> answer;
    stringstream ss(input);
    string temp;

    while (getline(ss, temp, delimiter)) {
        answer.push_back(temp);
    }
    return answer;
}

string solution(string s) {
    string answer = "";
    vector<string> nums = split(s, ' ');
    vector<int> num;
    int max = -9874;
    int min = 9874;

    for(int i= 0; i < nums.size(); i++){
        num.push_back(atoi(nums[i].c_str()));
        if(num[i] > max)
            max = num[i];
        if(num[i] < min)
            min = num[i];
    }
    answer = to_string(min) + " " + to_string(max);
    return answer;
}
728x90
반응형

+ Recent posts