반응형

얼마 전에 오랜만에 코딩 시험을 치루며, 구글링 없이 문법조차 다 까먹어 C언어로 제대로 코딩할 수 없던 날 발견했다. Java로 풀어볼까도 했지만, 라이브러리 없이 코딩을 해나가야하는 것도 자신이 없어 시험 시작 1시간 후, 시험을 중도 종료를 하였다. 그래서 이번에 다시 코딩 공부를 시작하며, 8년전 학부 1학년 때 살짝 배웠던 Python을 내 두번째 메인 개발 언어로 만들어 보고자 한다. 

 

 

 

 

오랜만에 코딩공부를 시작하며 LeetCode에 가입하고, 첫 날이니 Easy 에서도 제일 첫번째에 있던 #1 Two Sum을 골라보았다.

 

 

Solution

// JAVA
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap();
        
        for(int i=0 ; i < nums.length ; i++)
            map.put(nums[i], i);
        
        for(int i=0 ; i < nums.length ; i++)
            if(map.containsKey(target-nums[i]) && i != map.get(target - nums[i]))
                return new int[] {i, map.get(target-nums[i])};
        
        return new int[2];
    }
}

 

Python Dictionaries(딕셔너리)는 Java에서 HashMap과 같은 기능을 하며 key:value 형식으로 값을 저장한다. 
선언을 할 때에는 보통은 parameterName = {} 를 사용하고 parameterName = dict()로도 생성가능하다.
(List 생성은 =[], =list())

// Python
class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        complement_dict = {} // 딕셔너리 생성
        nums_len = len(nums)
        for i in range(nums_len):
            complement = target - nums[i]
            if complement in complement_dict:
                return [complement_dict[complement], i]
            else:
                if nums[i] in complement_dict:
                    continue
                complement_dict[nums[i]] = i

 

 

 

[참고]

leetcode.com/problems/two-sum/

 

Two Sum - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

dojang.io/mod/page/view.php?id=2213

 

파이썬 코딩 도장: 12.1 딕셔너리 만들기

지금까지 살펴봤던 리스트와 튜플은 값 여러 개를 일렬로 저장할 뿐 값끼리 연관 관계가 없었습니다. 예를 들어 게임 캐릭터의 능력치를 리스트에 저장해보겠습니다. 리스트 lux에서 인덱스 0은

dojang.io

 

반응형
반응형

= 재사용 가능한

 

정보기술(IT)에서 말하는 보일러 플레이트는 변경 없이 계속하여 재사용할 수 있는 저작품을 말한다. 때로는 "보일러 플레이트 코드"라고 불리며 재사용 가능한 프로그램을 가리키는 데 사용되기도 한다.

이 용어는 철강 제조 부문에서 유래되었으며, 보일러 플레이트는 원래 증기 보일러 내에 사용되는 커다란 압연 강판을 의미한다. 이 용어는 보일러 플레이트가 오랜 기간 동안 시험되었으며, 강철처럼 튼튼하다, 또는 반복적으로 재사용하기에 충분할 정도로 강력한 어떤 물건으로 만들어졌다는 등의 여러 가지 함축적인 의미를 내포하고 있다. 소프트웨어 하드웨어에 관한 계약 조건이 담겨 있는 법적 계약 등에서도 보일러 플레이트를 많이 사용한다. 이 용어는 또한 "보일러 플레이트 단락" 또는 "전체 문서는 보일러 플레이트였다" 등과 같이 형용사적으로 사용되기도 한다.

보일러 플레이트는 일종의 템플릿 등과 비교될 수 있는데, 이는 템플릿을 마치 빈칸을 채우도록 되어 있는 보일러 플레이트라고 생각할 수 있기 때문이다. 일부 대표적인 보일러 플레이트에는, 임무 기록서, 안전 표지, 일반적으로 사용되는 설치 절차서, 저작권 관련 문서, 그리고 책임 포기 성명서 등을 예로 들 수 있다.

1890년대에는, 실제로 신문을 인쇄하기 위해 금속으로 주조된 보일러 플레이트가 미국 전역의 신문사에 배포되기도 했다. 1950년대까지, 수천 개의 미국 신문들이 국내 최대 공급자인 Western Newspaper Union으로부터 이러한 종류의 보일러 플레이트를 받아 사용하였다

 

 

 

[참고] www.terms.co.kr/boilerplate

반응형
반응형

Lombok이란?

Lombok 프로젝트는 자바 라이브러리로 코드 에디터나 빌드 툴(IntelliJ, Eclipse, XCode 등)에 추가하여 코드를 효율적으로 작성할 수 있도록 도와준다. class명 위에 어노테이션을 명시해줌으로써 getter나 setter, equals와 같은 method를 따로 작성해야 하는 번거로움을 덜어준다.

 

lombok 어노테이션 중 내가 실제로 개발을 하며 가장 자주 사용했던 어노테이션은 @Data, @NonNull, @NoArgsConstructor/@AllArgsConstructor로 이에 대해 자세히 알아보고자 한다.

 

@Data

@Data 어노테이션은  @Getter / @Setter, @ToString, @EqualsAndHashCode와 @RequiredArgsConstructor 를 합쳐놓은 종합 선물 세트라고 할 수 있다. POJO(Plain Old Java Objects)와 bean과 관련된 모든 보일러플레이트(boilerplate =재사용 가능한 코드)를 생성한다. class의 모든 필드에 대한 getter, setter, toString, equals와 같은 함수들 말이다.

// lombok annotation 사용

@Data
public class Example {
    private String name;
    private double score;
}


// lombok annotation 미사용

public class Example {
    private String name;
    private double score;

    public DataExample(String name) {
        this.name = name;
    }
  
    public String getName() {
        return this.name;
    }
  
    public void setScore(double score) {
        this.score = score;
    }
  
    public double getScore() {
        return this.score;
    }
  
    @Override public String toString() {
        return "DataExample(" + this.getName() + ", " + this.getAge() + ", " + this.getScore() + ", " + Arrays.deepToString(this.getTags()) + ")";
    }
  
  protected boolean canEqual(Object other) {
    return other instanceof DataExample;
  }
  
  @Override public boolean equals(Object o) {
    if (o == this) return true;
    if (!(o instanceof DataExample)) return false;
    DataExample other = (DataExample) o;
    if (!other.canEqual((Object)this)) return false;
    if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;
    if (this.getAge() != other.getAge()) return false;
    if (Double.compare(this.getScore(), other.getScore()) != 0) return false;
    if (!Arrays.deepEquals(this.getTags(), other.getTags())) return false;
    return true;
  }
  
  @Override public int hashCode() {
    final int PRIME = 59;
    int result = 1;
    final long temp1 = Double.doubleToLongBits(this.getScore());
    result = (result*PRIME) + (this.getName() == null ? 43 : this.getName().hashCode());
    result = (result*PRIME) + this.getAge();
    result = (result*PRIME) + (int)(temp1 ^ (temp1 >>> 32));
    result = (result*PRIME) + Arrays.deepHashCode(this.getTags());
    return result;
  }
  
}

 

 

Data 어노테이션은 callSuper, includeFieldName, exclude와 같은 파라미터와 같이 사용될 수 없으므로, 해당 파라미터 사용이 필요할 때는 개별 어노테이션을 따로 다 명시해주면 되겠다.

@Getter
@Setter
@ToString(includeFieldNames=true)
@EqualsAndHashCode
@RequiredArgsConstructor
public class Example {
    private String name;
    private double score;
}

 

 

 

[참고] projectlombok.org/features/all

반응형
반응형

    준비    

1. 윈도우10 설치 가능한 MAC 모델인지 확인

다행히 MacBook Air 2012 Mid 모델도  Bootcamp를 지원합니다.

 

 

다행히 2012 모델 까지 윈도우 10 설치를 지원한다.

 

 

2. 맥 여유 공간 - 윈도우 10은 64GB의 여유 공간이면 되지만, 128GB의 경우 최적의 사용 환경을 제공한다.

  • 사과모양 > 이 Mac에 관하여 > 저장 공간

 

 

 

 

3. 16GB 이상 USB

4. Windows10 ISO 이미지 파일 다운로드

(Microsoft 공식 홈페이지 : www.microsoft.com/ko-kr/software-download/windows10ISO)

 

 

 

 

 

보통은 윈도우는 64bit로 사용한다.

 

 

 

5. 혹시 모를 상황에 대비하여 중요한 데이터는 백업하기

 

    설치    

1. Bootcamp 검색

Launchpad나 Spotlight 검색에서 'bootcamp'를 검색하면 손 쉽게 찾기 가능하다.

 

 

 

 

 

 

 

 

 

다운로드 받은 Windows 10 ISO 이미지를 선택

 

 

 

 

2. Windows ISO 파일 및 지원 소프트웨어 USB로 복사

 

 

 

 

4. 윈도우 설치할 용량 선택

이번에는 애플의 추천대로 64GB를 선택하였습니다. 전 윈도우에서는 크게 용량이 필요한 작업을 하지 않기 때문에 이전에 윈도우 8을 설치할 때는 32GB나 25GB 정도만 할당해주곤 했는데도 정상적으로 사용할 수 있었습니다. 하지만 윈도우에서 많은 프로그램 설치나 업데이트가 필요한 경우에는 적정 여유 용량을 할당해주시는 것을 추천합니다.

 

 

 

5. 설치 기다리기
셀프 재부팅 후 윈도우 설치 시스템이 진행됩니다. 설치가 시작되고 검은 화면이 꽤 오래 나와있는데, 당황하지 마세요. 기다리면 계속 진행이 됩니다.

ExFAT 이 왼쪽 상단에 나타나는데, 당황하지 마세요. 필자도 많이 당황했지만 기다리니 윈도우 로고와 함께 설치가 계속 진행되었습니다. 윈도우는 exFAT 파일 시템을 사용하기 때문에 해당 드라이브를 exFAT로 포맷하는 중이였던 것 같습니다.

 

 

 

 

     완료     

이후에 윈도우 10 설치 완료 후 기본 설정 세팅을 하면 윈도우 10을 사용할 수 있습니다.

맥 부팅 시 'option' 키를 3초 이상 누르면 부팅 디스크를 선택 가능합니다.

 

 

 

 

 

 

 

 

 

[참고] support.apple.com/ko-kr/HT201468

반응형
반응형
db.collection.distinct(field, query, options)
{ "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
{ "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
{ "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
{ "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }

 

 

[ MongoDB ]

> db.inventory.distinct( "dept" )
[ "A", "B" ]

> db.inventory.distinct( "item.sku" )
[ "111", "222", "333" ]

> db.inventory.distinct( "item.sku", { dept: "A" } )
[ "111", "333" ]

> db.inventory.distinct( "sizes" )
[ "M", "S", "L" ]

 

[ JAVA ]

mongoTemplate.getCollection("inventory").distinct("dept", Document.class);

mongoTemplate.getCollection("inventory").distinct("item.sku");

mongoTemplate.getCollection("inventory").distinct("item.sku", query);

mongoTemplate.getCollection("inventory").distinct("sizes");

 

반응형

+ Recent posts