https://stackoverflow.com/questions/58350727/xcode-11-how-to-stack-editor-vertically

 

Xcode 11: How to stack editor vertically?

I like to have 3 Editor windows, 1 Main window and the other half of the screen is split vertically with 2 windows. I use to be able to do this easily in Xcode 10 and earlier, but looks like I can...

stackoverflow.com

에디터 우상방에

이와 같은 아이콘이 있다.

이 아이콘을 클릭하면 우측으로 스플릿뷰가 생성되면서 두개의 파일을 동시에 볼 수 있다.

하지만 어디를 봐도 위아래로 볼 수 있는 버튼은 없다.

윈도우에서는 Alt, 맥에서는 Option 키를 누르고 있으면

이와 같은 아이콘으로 바뀌게 된다.

이 아이콘을 클릭하면 아래로 스플릿뷰가 생성된다.

vim

http://vimgenius.com

 

VimGenius

Hey! You've got Vimium enabled, which will break VimGenius. Please disable it or add http*://vimgenius.com/* to your exluded URLs. Become a Vim Genius Increase your speed and improve your muscle memory with Vim Genius, a timed flashcard-style game designed

vimgenius.com

https://openvim.com

 

Interactive Vim tutorial

/

openvim.com

https://vim-adventures.com/

 

Learn VIM while playing a game - VIM Adventures

VIM Adventures is an online game based on VIM's keyboard shortcuts. It's the "Zelda meets text editing" game. So come have some fun and learn some VIM!

vim-adventures.com

git

https://learngitbranching.js.org/?locale=ko

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

css select(CSS 선택자)

https://flukeout.github.io

 

CSS Diner

A fun game to help you learn and practice CSS selectors.

flukeout.github.io

Regular Expression(정규표현식

 

Regexper

 

regexper.com

 

RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs

Regular expressions are extremely useful in extracting information from text such as code, log files, spreadsheets, or even documents. And while there is a lot of theory behind formal languages, the following lessons and examples will explore the more prac

regexone.com

 

 

RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs

Regular expressions are extremely useful in extracting information from text such as code, log files, spreadsheets, or even documents. And while there is a lot of theory behind formal languages, the following lessons and examples will explore the more prac

regexone.com

'프로그래밍' 카테고리의 다른 글

[개발자 영어] bring, take, fetch  (0) 2021.12.20
[c++] 참조 배열을 인자로 넘기기  (0) 2021.05.28

문제

이렇게 numbers배열이 주어지면 각 원소들을 조합해서 가장 큰 수를 만드는 문제이다.


접근

처음 시도했던 접근 방법은 이렇다.
일단, 두 수를 비교했을 때 어떤 수가 앞에 와야 하는지 생각해봤다.

1. 맨 앞자리수가 커야 한다.
예를 들어서, 182를 비교했을 때 만들 수 있는 조합은 182218인데
218이 더 큰 것을 보면 앞 자릿수가 커야 조합했을 때 큰 수 를 만들 수 있다.

2. 앞자리수가 같다면 마찬가지 논리로 뒷자리 수가 커야 한다.
예를 들어서, 2827을 비교했을 때 만들 수 있는 조합은 28272728인데
2827이 더 큰 것을 보면 알 수 있다.

3. 모든 자리의 숫자가 같지만 자릿수가 다르다면, 자릿수가 같을 때까지 맨 앞의 수를 넣은 후 비교한다.
예를 들어서 38238을 비교했을 때,
382와 (38에 맨 앞 자릿수인 3을 붙인 383을 비교한다.
그렇게 하면 38382가 만들어지는데 이것은 다른 조합인 38238보다 더 큰 것을 알 수 있다.

4. 이렇게 해서도 모두 같으면 더 작은 수가 더 큰 조합을 만들 수 있다.
예를 들어서, 38338을 비교했을 때 만들 수 있는 조합은 3838338338인데
38383이 더 큰 것을 보면 수가 더 적은 38이 앞에 있는 상황인 것을 알 수 있다.

이렇게 해서 코드를 짜면 아래와 같다.

bool compare(const int& a, const int& b){
    string sa=to_string(a), sb=to_string(b);
    string tmp1=sa+sb, tmp2=sb+sa;
    return stoi(tmp1)>stoi(tmp2);
}

시행착오

하지만 이 코드에는 예외상황이 발생한다.

예를 들어서 [10,101,1]이 주어졌을 때 위의 논리대로 하면

1. 번으로는 모두 같고, 2. 번으로도 모두 같다.

이제 3. 번으로 비교하면 1 > (10 , 101) 순서가 된다.

이것을 4. 번으로 비교하면 1 > 10 > 101 이고, 이것으로 만든 수는 110101이 된다.

하지만, 실제로 가장 큰 수는 110110, 즉 1 > 101 > 10 순서가 된다.


깨달음

문제를 너무 복잡하게 생각했다.

이 문제는 여러 가지 수의 조합을 따져봤을 때, 가장 큰 조합을 만드는 것이다.

그렇다면 두 가지 수를 비교했을 때도 조합을 따져본 뒤, 가장 큰 조합을 만들 수 있는 배열을 만들어 주면 되는 것이다.

다시 위의 예를 들어서 10110을 비교한다고 했을 때

두 수로 만들 수 있는 조합 1011010101을 비교했을 때 10110이 더 크므로

101 > 10 순서를 만들어 주면 되는 것이다.

이것을 코드로 구현해보면 아래와 같다.

bool compare(const int& a, const int b){
    string sa=to_string(a), sb=to_string(b);
    if(sa.length()==sb.length()) return a>b;
    while(sa.length()!=sb.length()){
        if(sa.length()>sb.length()) sb.push_back(sb.front());
        if(sa.length()<sb.length()) sa.push_back(sa.front());
    }
    if(stoi(sa)==stoi(sb)) return a<b;
    return stoi(sa)>stoi(sb);
}

이렇게 하면 모든 배열을 가장 큰 수의 조합으로 만들어 줄 수 있다.

단 한 가지 예외 사항이 있는데 [0,0]이 주어졌을 경우에는 00이 출력되지만 답은 0이다.

이것을 예외 처리해주면 정답 코드는 아래와 같다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(const int& a, const int& b){ /* 위와 같음 */ }

string solution(vector<int> numbers) {
    string answer = "";
    sort(numbers.begin(), numbers.end(), compare);
    if(numbers[0]==0) return "0";
    for(int i=0; i<numbers.size(); i++){
        answer+=to_string(numbers[i]);
    }
    return answer;
}

앞으로

문제가 주어졌을 때, 문제를 곧이곧대로 보는 방법도 시도해보는 연습을 해야겠다.

'프로그래밍 > PS' 카테고리의 다른 글

효율적인 코딩테스트 공부방법 소개  (0) 2022.05.10
[c++][template] quick sort  (0) 2021.06.11
[백준] Class 3 All Solved  (0) 2021.06.03
[백준 12904] A와 B  (0) 2021.05.28
[백준 2109] 순회강연  (0) 2021.05.26

반열림구간 [start, end)에서의 quick sort template

// reference를 불러와서 실제 배열에도 swap의 결과를 반영한다.
void swap(int& a, int& b){
  int tmp=a;
  a=b;
  b=tmp;
}

void qsort(vector<int>& arr, int start, int end){
  // 분할된 원소가 0개이거나 1개일때까지 함수 호출
  // start+1==end일 때, 원소의 개수는 1개
  if(start+1>=end) return;

  int pivot=start; 
  // 값 설정 기준 : 첫번째 원소

  int bigger=start+1; 
  // bigger : pivot보다 큰 원소를 찾는 index
  // 값 설정 기준 : pivot + 1

  int smaller=end-1; 
  // smaller : pivot보다 작은 원소를 찾는 index
  // 값 설정 기준 : 마지막원소

  // `bigger`와 `smaller`이 교차할때 까지 pivot보다 크거나 작은 원소들을 서로 교환한다.
  while(bigger<=smaller){
    // end는 아무 원소도 가리키지 않으므로 end보다 작아야한다.
    // bigger이 가리키는 원소가 pivot이 가리키는 원소보다 작으면 계속 bigger을 키운다.
    while(bigger<end && arr[bigger]<=arr[pivot]) ++bigger;

    // smaller은 나중에 pivot과 swap해야하기 때문에 pivot의 index인 start와 같으면 안된다.
    // 역시, smaller이 가리키는 원소가 pivot이 가리키는 원소보다 크면 계속 smaller을 줄인다.
    while(start<smaller && arr[pivot]<=arr[smaller]) --smaller;

    // bigger과 smaller이 교차하면 종료한다.
    if(bigger>=smaller) break;

    // 교차하지 않았다면 서로가 가리키는 원소를 swap하고 다시 반복한다.
    swap(arr[bigger], arr[smaller]);
  }
  // 교차했다면 pivot과 smaller가 가리키는 원소를 서로 교환한다.
  // 이렇게 하면 pivot 왼쪽에는 pivot보다 작은것, 오른쪽에는 pivot보다 큰것이 위치한다.
  swap(arr[smaller], arr[pivot]);

  // pivot을 기준으로 오른쪽과 왼쪽으로 나눠서 다시 정렬을 수행한다.
  qsort(arr, smaller+1, end);
  qsort(arr, start, smaller);
}

'프로그래밍 > PS' 카테고리의 다른 글

효율적인 코딩테스트 공부방법 소개  (0) 2022.05.10
[프로그래머스][LV2] 가장 큰 수  (0) 2021.06.12
[백준] Class 3 All Solved  (0) 2021.06.03
[백준 12904] A와 B  (0) 2021.05.28
[백준 2109] 순회강연  (0) 2021.05.26

해피해킹은 윈도우와 맥을 동시에 지원하기 위해서

딥스위치 조작이 존재하는데, 매번 세팅을 변경하기 위해서 전원을 끄고 딥스위치를 조작하기는 어렵다.

그래서 맥과 윈도우에 똑같은 키 세팅을 통해 빠른 전환을 시도해 보자 했다.


1.  딥스위치

mac은 karabiner을 통해서 쉽게 키 세팅을 변경할 수 있기 때문에,
윈도우에 맞춰서 딥스위치를 설정해줬다

이렇게 하면 윈도우에서는 아래와 같은 키 세팅이 완료된다.

Window에서의 키 세팅


2.  Karabiner

이제 맥에서도 같은 키를 사용하기 위해 Karabiner에서 아래와 같이 설정을 해준다.


3.  시스템 키보드 세팅

위의 F18한/영 키로 설정해주기 위해서

시스템 환경설정 -> 키보드로 들어간다.

입력 소스 -> 이전 입력 소스 선택F18로 바꿔주면

위의 Karabiner로 설정했던 키와 조합되어

Right Opt == F18 == 한/영 키로 바뀌게 된다.

Mac에서의 키 세팅

자료를 찾아보다가 깃허브에서 괜찮은 자료를 발견했을 때
그 레포지토리에 너무 많은 디렉토리가 있고, 내가 원하는 자료는 그중 일부라면 레포지토리를 통째로 클론하는것은 부담이 된다.
그럴때는 특정 디렉토리만 클론할 수 있는 방법을 사용해야 한다.


상황

예를 들어서 아래와 같이 수많은 디렉토리가 있고,

나는 그중 src/algo 디렉토리만 클론하기를 원한다.


방법

1. 일단 내 local에 클론을 할 공간을 만들어준다.

git init

2. sparse Checkout기능을 사용하도록 설정한다.

git config core.sparseCheckout true

3. 원하는 디렉토리를 sparse Checkout의 대상으로 지정해준다.

echo src/algo > .git/info/sparse-checkout

4. remotes repository에서 local로 파일을 받아온다.

git pull origin master

REF

https://www.lesstif.com/gitbook/git-clone-20776761.html

+ Recent posts