문제 설명


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

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

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

 

제한조건

 

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

 

 

입출력 예

 

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

 

나의 풀이

 

def solution(numbers):
    a=list(map(str,numbers)) 
    a.sort(key=lambda x : x*3, reverse=True)
    
    if len(a) == a.count('0'):
        return '0'
    else:
        return  ''.join(a)

1. 입력받은 numbers를 문자열 형태로 바꿔 리스트 a에 저장합니다.
2. 리스트 a의 요소들을 3번씩 곱해 비교하여 내림차순으로 정렬합니다.

ex) '3' = '333', '30'='303030'

각 앞자리부터 비교하여 '3'과 '3'을 비교하여 같으니 '3'과 '0'을 비교하여 '3'이 더 크기 때문에 '333'을 큰 것으로 인식합니다.

3. 리스트 a의 모든 요소가 0일 경우 '0'을 리턴하고 그 외의 경우는 a를 하나의 문자열로 리턴합니다.

 


프로그래머스 '가장 큰 수' : https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 ��

programmers.co.kr

 

문제 설명


H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

 

제한조건

 

  • 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
  • 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.

 

입출력 예

 

citations return
[3, 0, 6, 1, 5] 3

 

입출력 예 설명


이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.

나의 풀이

 

def solution(citations):
    for i in range(len(citations),-1,-1):
        c=[j for j in citations if i<= j]
        if i <= len(c):
            return i

1. i보다 큰 논문의 수를 세서 개수가 i보다 많거나 같으면 i를 리턴합니다. 

다른 사람의 풀이

 

def solution(citations):
        
        citations.sort(reverse=True)
        answer = max(map(min, enumerate(citations, start=1)))
        return answer

 


프로그래머스 'H-Index' : programmers.co.kr/learn/courses/30/lessons/42747

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

 

문제 설명


배열 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입니다.

 

입출력 예

 

array commands return
[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 = []
    for i in range(len(commands)):
        s = commands[i][0] - 1
        e = commands[i][1] - 1
        k = commands[i][2] - 1
        
        a=array[s:e+1]
        a.sort()
        answer.append(a[k])
    
    return answer

1. commands의 2차원 배열에서 s, e, k를 구합니다.
2. array 배열을 s부터 e번째 숫자까지 자르고 정렬한 후 k번째 있는 수를 구해 리스트 answer에 넣어줍니다.
3. 1, 2번을 반복하고 마지막에 리스트 answer를 리턴합니다.

 

다른 사람의 풀이

 

def solution(array, commands):
    return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))

array 배열에서 x[0]-1번부터 x[1]-1번까지 자르고 정렬을 시킵니다.
정렬시킨 배열에서 x[2]-1번 위치의 값을 구합니다.

commands에서 이 과정을 해주고 리스트로 리턴합니다.

 


프로그래머스 'K번째수' : programmers.co.kr/learn/courses/30/lessons/42748

 

코딩테스트 연습 - K번째수

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

programmers.co.kr

 

문제


세 수 A, B, C가 주어진다. A는 B보다 작고, B는 C보다 작다.

세 수 A, B, C가 주어졌을 때, 입력에서 주어진 순서대로 출력하는 프로그램을 작성하시오.

 

입력


첫째 줄에 세 수 A, B, C가 주어진다. 하지만, 순서는 A, B, C가 아닐 수도 있다. 세 수는 100보다 작거나 같은 자연수이다. 둘째 줄에는 A, B, C로 이루어진 세 글자가 주어지며, 이 순서대로 출력하면 된다.

 

출력

 

주어진 세 수를 주어진 출력 순서대로 출력하면 된다.

예제 입력과 출력

 

 

알고리즘 분류


정렬

 

정답

 

import sys

n=list(map(int,sys.stdin.readline().split()))
k=sys.stdin.readline().strip()

a=min(n)
c=max(n)

n.remove(a)
n.remove(c)

b=n[0]

for i in k:
    if i == 'A':
        print(a,end=' ')
    elif i == 'B':
        print(b,end=' ')
    elif i == 'C':
        print(c,end=' ')

 


백준 알고리즘 3047번 : www.acmicpc.net/problem/3047

 

3047번: ABC

문제 세 수 A, B, C가 주어진다. A는 B보다 작고, B는 C보다 작다. 세 수 A, B, C가 주어졌을 때, 입력에서 주어진 순서대로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 세 수 A, B, C가 주어진다.

www.acmicpc.net

 

문제


도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.

  1. 국어 점수가 감소하는 순서로
  2. 국어 점수가 같으면 영어 점수가 증가하는 순서로
  3. 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
  4. 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)

 

입력


첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.

 

출력

 

문제에 나와있는 정렬 기준으로 정렬한 후 첫째 줄부터 N개의 줄에 걸쳐 각 학생의 이름을 출력한다.

 

예제 입력과 출력

 

 

알고리즘 분류


정렬

 

정답

 

import sys

n=int(sys.stdin.readline())
a=[]

for i in range(n):
    a.append(sys.stdin.readline().split())

a.sort(key =lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))

for i in range(n):
    print(a[i][0])

 


백준 알고리즘 10825번 : www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

 

문제

 

수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

입력


첫째 줄에 N(1 ≤ N ≤ 5,000,000)과 K (1 ≤ K ≤ N)이 주어진다.

둘째에는 A1, A2, ..., AN이 주어진다. (-109 ≤ Ai ≤ 109)

 

출력


A를 정렬했을 때, 앞에서부터 K번째 있는 수를 출력한다.

 

예제 입력과 출력

 

 

알고리즘 분류

 

정렬

정답

 

import sys

n,k=sys.stdin.readline().split()
a=list(map(int,sys.stdin.readline().split()))

a.sort()

print(a[int(k)-1])

 


백준 알고리즘 11004번 : www.acmicpc.net/problem/11004

 

11004번: K번째 수

수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

+ Recent posts