Programming 기초/Coding Test
-
[BOJ#5597번,10811번] list(map(int,range())), [*range()] 등차수열 리스트 만들기, 리스트 역순 방법 세 가지Programming 기초/Coding Test 2023. 7. 2. 22:25
* 과제 안 내신 분..?(5597번 문제) X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오. 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다. 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다. arr=list(map(int,range(1,31))) for i in range(28): arr.remove(int(input())..
-
[BOJ#10807번] count(), list(map(int,input().split()))Programming 기초/Coding Test 2023. 6. 17. 22:54
문제 총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다. 출력 첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다. 예제 입력 11 1 4 1 2 4 2 4 2 3 4 4 2 예제 출력 3 n = int(input()) array = list(map(int,input().split())) target = int(input()) print(array.count(target))
-
[이코테 # 다이나믹 프로그래밍1] 설명 및 메모이제이션Programming 기초/Coding Test 2023. 6. 13. 23:16
* 다이나믹 프로그래밍기법 동적계획법이라고도 하며, 메모리 공간을 약간 더 사용하여 연산 속도를 비약적으로 증가시키는 방법이다. 다이나믹 프로그래밍이란 큰 문제를 작게 나누고, 같은 문제라면 한 번씩만 풀어 문제를 효율적으로 해결하는 알고리즘 기법이다. 다이나믹 프로그래밍과 분할 정복의 차이점은 다이나믹 프로그래밍은 문제들이 서로 영향을 미치고 있다는 점이다. 아래 두 조건을 만족할 때 다이나믹 프로그래밍을 사용할 수 있다. 재귀 함수를 사용하면 컴퓨터 시스템에서는 함수를 다시 호출했을 때 메모리 상에 적재되는 일련의 과정을 따라야 하므로 오버헤드가 발생할 수 있다. 따라서 재귀 함수 대신에 반복문을 사용하여 오버헤드를 줄일 수 있다. 일반적으로 반복문을 이용한 다이나믹 프로그래밍이 더 성능이 좋다. 1..
-
[Python Tip#1] input()보다 sys.stdin.readline()의 처리속도가 더 빠르다.Programming 기초/Coding Test 2023. 6. 11. 02:02
*버퍼(buffer) 표준 입출력 함수를 사용할 때, 버퍼(buffer)라는 임시 메모리 공간을 사용한다. 이전 포스팅 참고(https://operationcoding.tistory.com/34) * input() input()은 한 줄을 입력 받고 문자열로 변환한다. 입력 마지막의 줄바꿈(\n)은 포함하지 않는다. 한 글자 누를 때마다 바로바로 데이터가 버퍼에 보관된다. 개행문자(\n)가 입력되면 버퍼의 입력이 종료된 것으로 간주. input() 호출 시 프롬프트 문자열을 화면에 출력해 사용자의 입력을 기다림. 대량의 입력을 받는 경우 받고 다시 프롬프트 창을 띄우고의 과정을 반복하므로 오류 발생 가능성이 증가한다. 더 이상 받을 입력이 없을 때 수행될 경우 EOF(End of File) error를 ..
-
[이코테 # 정렬2] 기본 정렬 라이브러리를 활용한 문제들Programming 기초/Coding Test 2023. 6. 9. 23:10
* 위에서 아래로(p.178) 제한시간 : 15분 입력할 수의 개수 n(1≤ n≤ 500)을 입력받고, 정렬대상의 1이상 100,000이하의 자연수의 수를 입력받는다. # sort()함수를 사용한 풀이 n = int(input()) m = [] for i in range(n): m.append(int(input())) m.sort(reverse=True) for i in range(len(m)): print(m[i], end=" ") # 정렬을 직접 구현한 버전 n = int(input()) m = [] for i in range(n): m.append(int(input())) for i in range(n): max_index = i for j in range(i + 1, n): if m[max_ind..
-
[이코테 # 정렬1] 정렬 소스코드, 선택/삽입/퀵/계수 정렬, sorted()와 sort()의 차이Programming 기초/Coding Test 2023. 6. 9. 02:21
* 선택 정렬 시간복잡도 : O(n^2) 이전 포스팅 선택/삽입 정렬 참고 : https://operationcoding.tistory.com/45 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스 for j in range(i + 1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i] # 스와프 print(array) * 삽입 정렬 시간 복잡도: 최악의 경우는O(n^2)이지만 보통 어느정도 정렬된 상태에서 삽입 정렬을 쓰기 때문..
-
[이코테 # DFS/BFS 2] 음료수 얼려 먹기(DFS), 미로탈출(BFS)Programming 기초/Coding Test 2023. 6. 7. 23:44
* 음료수 얼려 먹기(p.149) DFS 시간제한 : 30분 n, m = map(int, input().split()) case = [] for i in range(n): case.append(list(map(int, input()))) def dfs(x, y): # 상하좌우, 현재 위치의 x,y를 입력 if x = n or y = m: return False if case[x][y] == 0: case[x][y] = 1 dfs(x - 1, y) # 상 dfs(x + 1, y) # 하 dfs(x, y - 1) # 좌 dfs(x, y + 1) # 우 return True return False # 순서대로 탐색해서 아이스크림의 개수를 센다. count = 0 for i in range(n): for j i..
-
[이코테 # DFS/BFS 1] DFS, BFS 예제Programming 기초/Coding Test 2023. 6. 7. 21:03
* DFS(Depth-First Search, 깊이 우선 탐색) 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. 선입후출. 스택(재귀 함수) 사용 관행적으로 인접한 노드 중에서 방문하지 않은 노드가 여러 개 있으면 번호가 낮은 순서부터 처리한다. def dfs(graph, v, visited): # 현재 노드를 방문 처리 visited[v]=True print(v, end=' ') # 현재 노드와 연결된 다른 노드를 재귀적으로 방문 for i in graph[v]: if not visited[i]: dfs(graph, i, visited) # 인접 리스트 graph = [ [], [2, 3, 8], [1, 7], [1, 4, 5], [3, 5], [3,4], [7], [2, 6, 8], [1,7] ..