분류 전체보기 36

연결리스트(Linked List)(1) - 단일 연결 리스트

오늘은 단일 연결리스트가 무엇인지, 그리고 배열 기반 리스트와 비교하여 어떠한 장점이 있는지에 대해 소스코드와 함께 간단히 알아보겠습니다. ▶ 배열 기반 리스트란? 배열 기반 리스트는 가장 기본적인 리스트의 형태로 순차 리스트라고도 불립니다. 아래와 같은 형태를 가집니다. ▶ 배열 기반 리스트의 특징 - 특정 위치 원소에 즉시 접근 가능 - 데이터가 들어갈 공간을 미리 할당해야 함 - 원하는 위치로의 삽입, 삭제가 비효율적 (매번 모든 값을 이동시켜 주어야 함) ▶ 배열 기반 리스트 소스코드 (C언어) #define CRT_SECURE_NO_WARNINGS #include #include #include #define INF 10000 // 충분히 큰 수 int arr[INF]; // 충분히 큰 배열 생..

C언어(2) - 기본 입출력

C언어의 기본 입출력에 대해서 알아보겠습니다. 기본 입출력의 경우 C언어에서 사용자로부터 입력받은 데이터를 가공하여 출력하는 역할을 합니다. 콘솔창에 입력을 받는 내장함수 scanf()는 scanf("%{형식지정자}", &{변수명})과 같은 형식으로 선언하여 사용합니다. 다음과 같이 사용합니다. 이제 scanf를 통해 입력받을 수 있는 C언어 자료형(Data type)별 형식지정자를 알아보겠습니다. C언어 자료형별 형식지정자 int(4Bytes) 입/출력 모두 %d long long(8Bytes) 입/출력 모두 %lld double(8Bytes) 입력: %lf, 출력: %f float(4Bytes) 입/출력 모두 %f string(no limit) 입/출력 모두 %s char(1Byte) 입/출력 모두 ..

C언어(1) - 변수와 상수, 예약어와 식별자

변수 변수(variable)란 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미합니다. 즉, 변수란 데이터를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있습니다. 다음과 같이 선언하며, C언어에서 변수를 사용하려면 다음과 같이 초기화(변수에 값을 넣어주는 것)를 해주어야 합니다. {Data type} {Var name} = {Value}; 와 같이 선언하며, 초기화 없이 변수를 사용할 경우, 변수 안에 쓰레기 값이 들어가게 되어 오류를 발생시킵니다. ※ 정적 변수(Static Variable): C언어에서 정적 변수란 main method 바깥에 선언된 변수로, 초기화를 해주지 않으면 쓰레기 값이 아닌 0을 값으로 가지게 됩니다. 상수 상수(const..

C언어(0) - 개발환경 설치(MAC OS)

일반적으로 Window 운영체제에서는 Visual Stodio를 이용하여 C 또는 C++을 개발하지만, Mac OS용 Visual Studio는 C와 C++을 제공하지 않기 때문에 Xcode를 이용하여 C언어를 개발하는 방법을 알아보았습니다. 먼저, App Store에서 Xcode를 다운받아야 합니다. 시간이 다소 소요될 수 있습니다. 다음과 같은 창이 뜨면, Create a new Xode를 눌러 새 프로젝트를 생성할 수 있습니다. 프로젝트 내에 C언어를 컴파일하고 실행시킬 어플리케이션을 설치해주어야 합니다. Command Line Tool을 눌러주시면 됩니다. 그 후 프로젝트 이름을 입력하고, 저장할 디렉터리를 지정하면 프로젝트가 생성됩니다. 저는 test라는 이름의 프로젝트를 생성하였습니다. 생성된..

백준 온라인 저지 - 덩치(#7568) 파이썬

문제설명 이 문제는 입력받은 순서대로 덩치 랭킹을 매겨야 하기 때문에, ranking이라는 List를 따로 만들고, 사람들의 키, 몸무게가 담겨있는 people이라는 List에서 사람들의 키와 몸무게를 이중 for문을 이용하여 모두 비교한 후 조건을 충족하면 ranking의 해당 인덱스의 값을 +1 해주는 식으로 해결하였습니다. 자세한 사항은 코드를 참고하시기 바랍니다. 문제이름(# 문제번호) 파이썬 코드 import sys n = int(sys.stdin.readline()) people = [tuple(map(int, sys.stdin.readline().split())) for i in range(n)] ranking = [1 for k in range(n)] for i in range(len(pe..

백준 온라인 저지 - 분해합(#2231) 파이썬

문제설명 이 문제는 각 자릿수의 합을 문자열로 보고 문자열의 각 요소를 더해줌으로써 쉽게 해결할 수 있습니다. 0부터 n까지 숫자를 오름차순으로 검사하다가 조건에 맞는 수가 나오면 종료하는 방법으로 풀 수 있습니다. 자세한 풀이는 코드를 참고하시면 됩니다. 분해합(#2231) 파이썬 코드 n = int(input()) result = 0 for i in range(n): dcp = i + sum(int(j) for j in str(i)) # dcp = decomposition(분해합) if dcp == n: # 분해합이 n일 경우 결과값에 i값 할당, 반복문 종료 result = i break print(result)

백준 온라인 저지 - 블랙잭(#2798) 파이썬

문제설명 브루트포스는 조합 가능한 모든 경우의 수를 하나씩 검사하는 방법입니다. 이 문제는 3개의 숫자의 합이 M을 넘지 않으면서 M과 가장 가까운 수를 찾아야 합니다. 저는 itertools의 combinations 함수를 사용하여 주어진 카드 중 3장을 골라 조합할 수 있는 경우의 수를 모두 구해 coc라는 리스트에 담았습니다. 그 다음 coc 리스트 내에 있는 카드의 조합들을 검사하여 m이 넘지 않는 가장 큰 수를 구하였습니다. 자세한 내용은 코드를 참고하시면 됩니다. 문제이름(# 문제번호) 파이썬 코드 import sys import itertools n, m = map(int, sys.stdin.readline().split()) cards = list(map(int, sys.stdin.read..

컴파일러(Compiler)와 인터프리터(Interpreter) 차이

컴파일러(Compiler) 방식 컴파일러는 프로그래밍 언어의 번역기입니다. 컴파일러는 개발자가 입력한 프로그래밍 언어를 실행가능한 머신코드로 변환시켜줍니다. 이 머신코드를 사용자 컴퓨터에서 전달받아 명령어에 맞게 작동하는 구조입니다. 컴파일러는 입력받은 프로그래밍 언어를 한 번에 번역하기 때문에 규모가 큰 프로그램에서는 다소 시간이 소요된다는 단점이 있습니다. 인터프리터(Interpreter) 방식 인터프리터는 프로그래밍 언어의 실행기입니다. 인터프리터는 개발자가 입력한 프로그래밍 언어를 한 줄 씩 실행시켜줍니다. 코드를 한 줄 씩 즉시 실행하기 때문에 개발시간이 짧아진다는 장점을 가지고 있습니다. 인터프리터로 작성된 코드는 번역과정을 거치지 않고 바로 사용자 컴퓨터로 전송하기 때문에 전달받은 사용자 컴..

구현(Implementation)

구현(Implementation)이란? 구현이란 문제풀이를 소스코드로 바꾸는 과정을 의미합니다. 일반적으로 구현 유형의 문제는 상대적으로 문제풀이 방법을 떠올리는 것보다 문제풀이 방법을 소스코드로 바꾸는 것이 더 어려운 경우를 지칭합니다. 따라서 구현 유형의 문제를 잘 해결하려면 해당 프로그래밍 언어에 대한 깊은 이해도와 다양한 라이브러리 활용 능력이 필요합니다. 구현문제 데이터 유형 예시는 다음과 같습니다. 알고리즘은 간단하지만 코드가 길어지는 문제 실수 연산을 다루고 특정 소수점까지 출력해야 하는 문제 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 활용하는 문제 행렬(Matrix) 일반적으로 알고리즘 문제에서 2차원 공간은 행렬(matrix)로 표현할 수 있습니다...

백준 온라인 저지 - ACM호텔(#10250) 파이썬

문제설명 이 문제의 핵심은 경우의 수를 잘 나누는 것입니다. 호텔에 온 순서대로 1)가까운 호실, 2) 낮은 층을 배정합니다. 101, 201, 301..102, 202, 302.. 의 형태로 배정이 되겠죠. 먼저 여러 개의 테스트케이스를 받기 때문에 for문을 활용하여 H, W, N을 테스트케이스 배열에 저장합니다. 그 다음, N번째로 온 손님이 머물 층과 호수를 따로 구해야 합니다. 먼저 층은 N을 H로 나눈 나머지가 될 것입니다. 단, 나머지가 0이라면 N은 H가 되어야 합니다. 호실의 경우 N을 H로 나눈 몫이 됩니다. 이제 하나의 문자열에 층과 호수를 합쳐서 방 번호를 출력하면 되는데, 호수가 9 이하라면 층과 호수 사이에 0을 삽입해야 합니다. ACM호텔(#10250) 파이썬 코드 t = in..