Programming Language

A -> 1, B -> 2, C -> 3, ..., Z -> 26, AA -> 27, AB -> 28,...과 같은 원리로 문자를 바꿔야 한다. 딱 보기에도 규칙이 보이지만 코드로 써 보려니 어려웠다. 뼈대 코드 #include #include int col_to_num(char col[]) { int len = strlen(col); long long num = 0; int i=0; while (i
구조체 사용자가 C언어의 기본 타입들을 가지고 새롭게 정의하는 사용자 정의 타입 같은 타입의 변수 집합이 배열이라면, 구조체는 다양한 타입의 변수 집합 구조체를 구성하는 변수를 구조체의 멤버/멤버 변수라고 함 문법 선언 구조체는 struct 키워드를 이용해 정의 struct Person { char name[20]; int age; char address[100]; }; 이때, name, age, address는 구조체 Person의 멤버 변수 구조체를 더 편하게 사용하려면 앞에 매번 struct를 붙여야 함(Person 단독 사용 불가) 더 편하게 쓰기 위해 typedef를 같이 사용 (*typedef: 이미 존재하는 타입에 새로운 이름을 붙이려고 사용하는 키워드) typedef struct Perso..
Selection Sort, 선택 정렬 선택된 값과 나머지 데이터를 비교하여 알맞은 자리를 찾는 알고리즘 첫 번째 값을 선택하고 두 번째 값부터 순회하면서 제일 작은 값을 첫 번째 값과 바꿈 두 번째 값을 선택하고 세 번째 값부터 순회하면서 제일 작은 값을 두 번째 값과 바꿈 … 반복 시간 복잡도: O(n^2) Bubble Sort, 버블 정렬 배열을 계~속 순회하면서 앞뒤 원소가 오름차순이 아니면 둘이 바꿈 Insertion Sort, 삽입 정렬 데이터 집합을 순회하면서 정렬이 필요한 요소를 뽑아 적당한 곳으로 삽입 시간 복잡도: O(n^2) Quick Sort, 퀵 정렬 분할 정복 임의의 기준 값(pivot)을 정하고 해당 피벗을 기준으로 두 개의 부분 집합으로 나눔 왼쪽에는 피벗보다 작은 값들만, ..
개념 포인터는 어떤 변수의 메모리 주소 값을 저장하는 변수로, 선언과 역참조로 많이 사용된다. a: a가 가리키는 값 출력 &a: a가 저장되어 있는 메모리 주소 출력 선언과 역참조는 둘 다 *(애스터리스크, asterisk)를 기호로 사용하는데, 선언은 말 그대로 '선언' 시에만 사용하고(int *a; 같은 경우) 나머지는 대부분 역참조, 즉 포인터 변수의 값(=메모리 주소)에 접근해 그 주소에 저장된 실제 값을 빼 온다고 생각하면 된다. *s로 선언한 포인터 변수가 있을 때 *를 붙이지 않고 사용하면 메모리 주소 값 자체를 다룬다는 이야기이고, 선언할 때 이미 포인터 변수로 선언했으므로 역참조를 하지 않는 이상 *를 붙일 필요는 없다. 포인터 변수에 *가 붙는 경우 무조건 역참조라고 생각하자. 예제 ..
#include int main(void) { int a[] = {2, 3, 5, -7}; int *p, *q; // int 타입의 값을 저장하는 메모리 주소를 가리키는 포인터 for (int i=0; i
시간 때문에 많이 고생한 문제 -.- for문의 범위에 관해서도 많이 고민했다. 아이디어 1. 원소 값과 인덱스가 일치하는 배열을 만들기 위해 n+1 사이즈 배열에 각 값을 넣는다. 2. 2부터 루트 n까지의 범위를 가지는 1차 for을 돌린다. 이것은 배열에서 2의 배수, 3의 배수, ..., i의 배수를 지우기 위해 돌리는 for문이다. 이때 기호로 i를 사용하며, 이것을 배열의 인덱스 번호로 생각한다. (*에라토스테네스의 체는 소수의 배수를 지우는 방식으로 동작한다. 예시로 어떤 수가 i*j(i
스토리지 클래스 C언어에서 기억 영역을 분류하기 위해 사용되는 언어로, 일반적으로 기억 영역 분류라고 번역됨 객체 지향의 클래스와는 관련 없음 auto, register, static, extern의 네 가지 종류로 나눠짐(각 키워드는 상호 배타적: 두 가지 이상의 키워드 함께 사용 X) 1. auto 지역 변수 선언 시 아무것도 지정하지 않았을 때 기본값으로 지정되는 클래스 사용할 일 거의 없음 2. register 변수를 메모리 대신 *레지스터에 저장하고 싶을 때 사용 but 반드시 레지스터에 저장되는 것은 X 메모리에 만들어진 변수가 아니므로 주소 연산자 '&' 사용 불가능 변수의 크기가 **레지스터 사이즈보다 작아야 함 최근의 컴파일러들은 알아서 레지스터를 잘 활용하기 때문에 이 지시자를 무시할 ..
입력 float a = 123.123456789f; printf("9.3f", a); printf("9.9f", a); 출력 245.123 245.123458862 소수점 앞의 9는 정수부, 소수점, 소수부를 포함한 모든 출력의 최소 길이, 소수점 뒤의 숫자는 소수점 아래 몇 자리까지 출력할 것인지를 나타낸다. 따라서 첫 번째 프린트문의 경우 최소 정수부, 소수점, 소수부 포함 최소 9자리를 사용해야 하는데 소수점 한 자리, 소수부 세 자리, 정수부 세 자리 해서 일곱 자리밖에 안 되니 공백으로 2자리를 채운다. decimal이나 string 출력 시 서식 문자를 %3d, %10s 이렇게 정수와 함께 입력하면 각각 최소 3자리, 10자리는 차지해야 한다는 말이 되므로 잘 계산해서 하면 문자열의 길이에 상..
집합(HashSet)을 사용하면 금방 풀리는 쉬운 문제 되게 간단하지만 테스트 케이스가 딱 하나라 왜 틀린 건지를 몰라 헤맸다 챗지피티한테도 물어봤지만 멍청지피티는 기대에 부응하는 법이 없다 결국 백준 커뮤니티에서 찾아봤는데 좋은 테스트 케이스가 있었다 1 5 a a a a a a 기댓값: 5 실제 출력값: 1 아마 문제에서의 테스트 케이스는 잘 통과했음에도 틀렸습니다가 뜬다면 이 케이스도 1이 출력될 것이다 비교해야 하는 세트와 비교당하는 세트 총 두 개의 세트를 만들어서 교집합을 구하려고 하면 똑같은 요소가 여러 개일 경우 당연히 중복이 제거되기 때문 그러므로 하나의 세트만 만들어서 문자열과 바로 비교해 주는 것이 좋다 다음은 정답 코드 import java.io.*; import java.util...
구현 자체는 간단했지만 소수 계산이나 문자열 비교 때문에 번거로웠던 문제 앞서 말한 소수 계산, 문자열 비교를 용이하게 하기 위해 BigDecimal이라는 새로운 클래스를 도입하는 것이 필요했다 BigDecimal은 자바에서 정밀한 소수점 계산을 할 때 사용하는 클래스로, 나는 equals 외에도 add, subtract, multiply, divide 메서드를 사용했다 메서드 a.equals("string"): a와 string이 같은지 비교 a.add(b): a에 b를 더함 a.subtract(b): a에서 b를 뺌 a.multiply(b): a와 b를 곱함 a.divide(b, 6, BigDecimal.ROUND_HALF_UP): a를 b로 나눔, 이때 나누어떨어지지 않는 연산의 경우 소수점 몇 자..
ecc1
'Programming Language' 카테고리의 글 목록