SW개발/코딩테스트

    [프로그래머스]H-Index-정렬

    def solution(citations): citations.sort() for i in range(len(citations)): if citations[i] >= len(citations)-i: return len(citations)-i return 0 코드 설명 먼저 citations 리스트를 정렬을 해줌으로써 인용된 횟수를 오름차순으로 정렬합니다. 그 후 citations 리스트의 길이만큼 반복문을 수행하고 만약 논문에 인용된 횟수가 논문의 수 - i 라면 논문의수 - i 를 return 합니다. 만족하지 못한다면 0을 리턴하여 줍니다. Point : 오름차순 정렬을 통하여 가장 적은 인용 횟수를 맨 앞으로 배치하여 줍니다. 이를 통하여 불필요한 반복문을 없앨 수 있습니다. 이 문제에서 가장 중요..

    [프로그래머스]가장 큰 수-정렬

    def solution(numbers): numbers = list(map(str, numbers)) # x*3을 기준으로 하여 정렬한다. # 기준을 삼는 것이기 때문에 실제로 정렬되는 데이터는 *3이 된 것이 아니다. numbers.sort(key = lambda x: x*3, reverse=True) return str(int(''.join(numbers))) 코드 설명 먼저 입력받은 numbers 리스트를 map() 함수를 통하여 전부 str 형으로 바꿔준다. map object가 되기 때문에 list() 함수를 통하여 리스트 형으로 다시 변환시켜준다. sort() 함수의 key 인자 값을 활용(key 를 기준으로 하여 리스트로 정렬함)하여 내림차순 정렬을 해준다. join 함수를 활용하여 리스트를..

    [프로그래머스]K번째수-정렬

    def solution(array, commands): answer = [] for i in commands: temp = array[i[0]-1:i[1]] temp.sort() answer.append(temp[i[2]-1]) return answer 코드 설명 commands 리스트 안에서 for 반복문을 돌려 commands[i][0:2] 에 해당하는 원소들을 리스트로서 접근하여 temp 리스트에 (i ~ j 번째를 자른 결과) 넣어준다. 그 후 정렬을 하고 정렬된 리스트의 i[2]-1 인덱스(k를 의미함)에 접근하여 answer 리스트에 원소를 추가하여 준다. Point : 파이썬에는 내장 정렬 함수인 sort(), sorted()가 존재하기에 이를 활용하면 정렬을 위한 코드를 작성하지 않아도 된..

    [프로그래머스]네트워크-DFS/BFS

    https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr DFS 알고리즘 이용 def solution(n, computers): visited = [0 for _ in range(n)] cnt = 0 def dfs(visited, i): visited[i] = True for j in range(n): # 컴퓨터가 연결되어 있고, 방문하지 않은 곳이라면 방문 if computers[i][j] == 1 and no..

    [프로그래머스]타겟넘버-DFS/BFS

    https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr DFS 알고리즘 이용 # DFS 알고리즘 이용 def solution(numbers, target): cnt = 0 def dfs(level, sum): # 주어진 수를 모두 이용했을때 if level == len(numbers): # 더한 최종 값이 target과 같다면 if sum == target: no..

    [프로그래머스]체육복-그리디

    체육복 문제 코드 def solution(n, lost, reserve): set_reserve = set(reserve)-set(lost) set_lost = set(lost)-set(reserve) for i in set_reserve: if i-1 in set_lost: set_lost.remove(i-1) elif i+1 in set_lost: set_lost.remove(i+1) return n-len(set_lost) 코드 설명 먼저 set(집합) 함수를 활용하여 여유 분이 있는 학생들 중에서 잃어버린 경우를 계산하여 체육복 수를 갱신하여 줍니다. 그 후, 잃어버린 학생들 집합에서 여유 분이 있는 학생들 집합을 빼주어 진짜로 잃어버려서 빌려야 하는 학생들만을 집합으로 남겨두고 갱신한다. 여유 ..

    [코드업 기초 100제]1096~1099 번 문제 풀이

    1096번 a=int(input()) arr=[[0]*19 for i in range(19)] //이차원 배열 생성 for x in range(a) : //입력된 횟수 만큼 반복문 수행 a, b = map(int, input().split()) //좌표 위치 저장 arr[a-1][b-1]=1 //좌표 위치의 배열을 1로 할당, 배열 인덱스 0 부터 시작이라 -1씩 줌 for i in arr : //배열 만큼 반복 for j in i : //리스트 안의 값을 뽑아냄 print(j, end=' ') print() //줄바꿈 1097번 arr = [[0]*19 for x in range(19)] //이차원 배열 생성 for i in range(19) : //주어진 배열 input값 할당하는 반복문 a = li..

    [코드업 기초 100제]1091~1095 번 문제 풀이

    1091번 a, m, d, n = map(int, input().split()) for x in range(n-1) : a = a*m+d print(a) 1092번 a, b, c = map(int, input().split()) day = int(1) //처음 가입한 날 while (day%a != 0 or day%b !=0 or day%c != 0) : //서로 동시에 방문하기 전까지 반복문 수행 //동시에 방문하는 순간 종료(즉, 최소 공배수) day += 1 //카운트 print(day) //반복문 종료 후 서로 동시에 방문하는날 출력 1093번 a = int(input()) b = input().split() arr = [] for i in range(24) : //23명의 학생을 위한 1차원 배..

    [코드업 기초 100제]1086~1090 번 문제 풀이

    1086번 w, h, b = input().split() w = int(w) h = int(h) b = int(b) mb = (w*h*b)/8/1024/1024 print("%.2f MB" % mb) 1087번 a = int(input()) sum = 0 for x in range(1, a+1) : sum += x if(sum >= a) : print(sum) break 1088번 a = int(input()) for x in range(1, a+1) : if(x%3 != 0 ) : print(x) a += 1 1089번 a, d, n = input().split() a = int(a) d = int(d) n = int(n) x = a + d*(n-1) print(x) 1090번 a, r, n = inp..

    [코드업 기초 100제]1081~1085 번 문제 풀이

    1081번 a, b = input().split() a = int(a) b = int(b) for i in range(1, a+1) : for j in range(1, b+1) : print(i, j) 1082번 a = input() b = int(a, 16) for x in range(1,16) : print("%c*%X=%X" % (a, x, b*x)) 1083번 a = int(input()) for x in range(1, a+1) : if(x%3 == 0) : print("X") else : print(x) 1084번 a, b, c = input().split() a = int(a) b = int(b) c = int(c) cnt = 0 for i in range(0, a) : for j in ra..