문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


제한사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbersresult

[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12] 를 return 해야 합니다.

나의 풀이

combination 함수를 이용해 풀었습니다. 처음 정렬은 빼도 결과에 무관할 듯하네요.

 

from itertools import combinations

def solution(numbers):
    answer, answer1 = [], []
    numbers.sort()
    
    answer = list(combinations(numbers, 2))
    
    for i in range(0, len(answer)):
        answer1.append(sum(answer[i]))
   
    answer = list(set(answer1))
    answer.sort()
        
    return answer

문제 설명

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

입출력 예

numsresult

[1,2,3,4] 1
[1,2,7,6,4] 4

입출력 예 설명

 

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

 

입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

 

나의 풀이

그냥 combination 함수로 조합 구해서 더한 값을 소수인지 판별해야 겠다고 생각함. 에라토스테네스의 체를 사용하지 않은 이유는 값의 범위(1~50,000 정도)가 너무 넓기 때문에 그냥 숫자를 하나씩 넣어서 카운트하는게 더 빠르다고 생각했다. 물론 combination함수를 사용할 때 시간초과에 걸리지 않을까 싶었지만 (다른 문제에서 permutation 함수 사용 시 경험) 다행이도 잘 넘어갔다.

 

대부분이 그러겠지만 나도 프로그램하면서 중간 중간 값을 출력하여 원하는 값으로 출력이 되고 있는지 확인해 본다.

 

from itertools import combinations
import math 

def is_prime(x):
    for i in range(2, int(math.sqrt(x)+1)):
        if x % i == 0 :
            return 0
    return 1

def solution(nums):
    answer, answer1 = [], []
    
    answer = list(map(list, combinations(nums, 3)))
    #print("combinations array", answer)
    
    for i in range(0, len(answer)):
        answer1.append(sum(answer[i]))
    
    #print("prime array : ", answer1)
    
    # prime 확인
    count = 0
    
    for i in answer1:
        if is_prime(i) == True:
            count += 1
            #print("prime : ", i, end = ' ')
    
    #print("count : ", count)

    return count

 

 

문제 설명

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)

제한 조건

  • n은 2이상 1000000이하의 자연수입니다.

입출력 예

nresult

10 4
5 3

입출력 예 설명

입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환

입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환

 

나의 풀이 : 에라토스테네스의 체

 

풀어 본 적이 있는데도 불구하고 다시 풀으려고 하니 버벅대는군요..

 

import math 

def solution(n):
    # 테이블 초기화 : 소수로 설정
    prime = [True for _ in range(n+1)]
    prime[0] = False
    
    for i in range(2, int(math.sqrt(n)+1)):
        if prime[i] == True:
            j = 2
            while i * j <= n:
                prime[i*j] = False
                j += 1
    
    answer = 0
    for i in range(2, n+1):
        if prime[i] == True:
            answer += 1
    
    return answer

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예

participantcompletionreturn

["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"

입출력 예 설명

예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

 

 

나의 풀이

처음에는 차집합을 이용하여 풀려고 했는데 동명이인일 경우 집합을 만드는 순간 중복이 제거 되는 문제가 있더라고요. 그래서 문제 취지에 맞게 해시를 이용하여 풀자고 생각하고 해시 테이블에서 참가자를 한 명씩 더해주고 다시 완주자를 빼주는 방식으로 풀었습니다.

 

다른 분들의 풀이를 보니 Counter 함수로 간단하게 해결하신 분이 몇 분 정도 계셨고 정렬하여 비교하시는 분들도 꽤 많았네요.

 

def solution(participant, completion):
    answer = ''
    plist = {}
    for i in participant:
        try: 
            if plist[i] :
                plist[i] += 1
        except: 
            plist[i] = 1
    
    for i in completion:
        try:
            if plist[i] :
                plist[i] -= 1
        except:
            pass
    
    for _ in plist:
        if plist[_] == 1:
            answer = _
    
    return answer

'자료구조 & 알고리즘 & 코딩 테스트 > 프로그래머스' 카테고리의 다른 글

두 개 뽑아서 더하기  (0) 2021.07.09
소수 만들기  (0) 2021.07.09
소수 찾기  (0) 2021.07.09
정렬(level1) - K번째수  (0) 2021.07.09
정렬(level2) - 가장 큰 수  (0) 2021.07.09

문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

arraycommandsreturn

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

입출력 예 설명

[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

 

내 풀이

def solution(array, commands):
    answer = []
    tmp = []
    
    for i in commands:
        tmp = array[i[0]-1:i[1]]
        tmp.sort()
        answer.append(tmp[i[2]-1])
        
    return answer

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

numbersreturn

[6, 10, 2] "6210"
[3, 30, 34, 5, 9] "9534330"

 

순열을 이용해서 풀고자 하였더니 코드 실행 시에는 테스트를 통과 하였지만 코드 제출 시에 시간 초과가 발생한다.

 

from itertools import permutations


def solution(numbers):
    tmp, tmp1 = [],[]
    tmp = list(permutations(numbers, len(numbers)))

    for i in range(0, len(tmp)):
        tmp1.append(''.join(list(map(str, tmp[i]))))
     
    tmp1.sort()
    answer = tmp1[-1]
    return answer

 

아무래도 더 효율적인 방법을 생각해 봐야 할 듯...

배열의 숫자 값을 문자로 변환하고 정렬 후에 큰 수 부터 더하는 간단한 방식으로 풀어봐야겠다.

'자료구조 & 알고리즘 & 코딩 테스트 > 프로그래머스' 카테고리의 다른 글

두 개 뽑아서 더하기  (0) 2021.07.09
소수 만들기  (0) 2021.07.09
소수 찾기  (0) 2021.07.09
해시(level1) - 완주하지 못한 선수  (0) 2021.07.09
정렬(level1) - K번째수  (0) 2021.07.09

1. 마우스가 가는 곳 마다 커서 만들기

 

⌥ + ⇧ + Mouse Drag or Alt + ⇧ + Mouse Drag

 

 

2. 선택된 영역에 커서 만들기

 

⌥ + ⇧ + i or Alt + ⇧ + i      

 

 

3. 코드 블록 한방에 코멘트 처리하기

 

⌘ + / or Ctrl + /

 

 

4. 코드 복사해서 위/아래로 움직이기

 

⌥ + ⇧ + ↑ / ↓ or Alt + ⇧ + ↑ / ↓

 

 

5. 코드 위/아래로 움직이기

 

⌥ + ↑ / ↓ or Alt + ↑ / ↓

 

 

6. 클릭하는 곳마다 커서 생성

 

⌥ + Click or Alt + Click  (윈도우 환경에서 안 될 경우 :  Ctrl + click 으로 시도)

 

 

7. 반복되는 단어 한방에 수정

 

⌘ + D or Ctrl + D


Bonus: Top / Bottom of File: ⌘ + ↑ / ↓ or Ctrl + Home / End Hide / Show Sidebar: ⌘ + B or Ctrl + B

 

출처 : 노마드 코드님 영상

5 Essential VSCode Shortcuts To Code Faster

https://www.youtube.com/watch?v=Wn7j5dfbJF4&t=50s

'Editor > Visual Studio Code' 카테고리의 다른 글

Visual Studio Code  (0) 2020.06.22

expo 내 이미지 설정 

 

favicon.png : 48x48px

icon.png : 192x192px

splash.png : 1242x1242px

'Javascript > React' 카테고리의 다른 글

Reactive-native 프로젝트 초기화 및 준비 과정  (0) 2020.07.04

1. 앱 생성하기

react-native init AppName

 

2. npm 명령을 통한 styled-components 설치 및 저장하기

npm install --save styled-components

 

3. typescript 사용을 위한 명령어 사용

npm install --save typescript @types/react @types/react-native @types/styled-components babel-plugin-root-import

 

4. tsconfig.json 파일 생성하기

react-native init AppName --template typescript

 

파일 내용은 아래와 같다.

{

"comilerOptions": {

"allowJs": true,

"allowSyntheticDefaultImports": true,

"esModuleInterop": true,

"isolatedModules": true,

"jsx": "react",

"lib": ["es6"],

"moduleResolution": "node",

"noEmit": true,

"strict": true,

"target": "esnext",

"baseUrl": "./src",

"paths": {

"~/*": ["*"]

}

},

"exclude": [

"node_modules",

"babel.config.js",

"metro.config.js",

"jest.config.js"

]

}

 

5. babel 환경 파일(babel.config.js) 수정하기

module.exports = {

presets: ['module:metro-react-native-babel-preset'],

plugins: [

[

'babel-plugin-root-import',

{

rootPathPrefix: '~',

rootPathSuffix: 'src',

},

],

],

};


6. App.js 파일 수정하기

이름을 App.tsx로 변경 후 src로 이동

import React, {Fragment} from 'react';

import {SafeAreaView, StatusBar, Text} from 'react-native';

import {

Header,

LearnMoreLinks,

Colors,

DebugInstructions,

ReloadInstructions,

} from 'react-native/Libraries/NewAppScreen';

import Styled from 'styled-components/native';

 

const ScrollView = Styled.ScrollView`

background-color: ${Colors.lighter};

`;

 

const Body = Styled.View`

background-color: ${Colors.white};

`;

 

const sectionContainer = Styled.View`

margin-top: 32px;

padding-horizontal: 24px;

`;

 

const sectionDescription = Styled.Text`

margin-top: 8px;

font-size: 18px;

font-weight: 400;

color: ${Colors.dark};

`;

 

const HighLight = Styled.Text`

font-weight: 700;

`;

 

interface Props {}

 

const App = ({}: Props) => {

return (

<>

<StatusBar barStyle="dark-content" />

 

<SafeAreaView>

<ScrollView contentInsetAdjustmentBehavior="automatic">

<Header />

 

<Body>

<Text>test</Text>

</Body>

</ScrollView>

</SafeAreaView>

</>

);

};

 

export default App;

export default App;

 

7. index.js 파일 수정하기

import App from '~/App';

 

'Javascript > React' 카테고리의 다른 글

앱 제작 이미지 사이즈 참조  (0) 2020.07.07

왜 사용하나?

 

1. 무료

무료와 유료의 간격은 크다. 유료 소프트웨어의 경우 대부분의 사용자들이 기업이나 법인 그리고 공공기관 같은 곳에서 사용을 하고 있다. 프로그램 선택하게 되는 우선 순위에서 무료라는 것은 아주 큰 강점 중에 하나로 볼 수 있다.

 

2. 다양한 플랫폼 지원

Mac, Windows, Linux를 모두 지원하고 있다. 

업무 상 여러 운영체제를 동시에 이용하는 경우가 대부분인데 다른 운영체제에서도 동일한 edit 환경을 구축할 수 있다는 것은 지속적으로 Visual Studio Code를 이용하게 되는 매력으로 볼 수 있다.

 

3. 풍부한 확장 플러그인 (extension)

자신이 원하는 프로그래밍 환경을 구축 할 수 있도록 수많은 extension들이 지원되고 있다.

사실 나는 이것 때문에 사용을 하고 있다.

 

공식 사이트

https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

내용은 앞으로 계속 업데이트 할 예정입니다.

'Editor > Visual Studio Code' 카테고리의 다른 글

VSCode 유용한 단축키 정리  (0) 2020.07.08

+ Recent posts