1ν•™λ…„ (2023)/C μ–Έμ–΄ 26

[C] λ°±μ€€/BAEKJOON 15651번: Nκ³Ό M (3)

https://www.acmicpc.net/problem/15651 15651번: Nκ³Ό M (3) ν•œ 쀄에 ν•˜λ‚˜μ”© 문제의 쑰건을 λ§Œμ‘±ν•˜λŠ” μˆ˜μ—΄μ„ 좜λ ₯ν•œλ‹€. μ€‘λ³΅λ˜λŠ” μˆ˜μ—΄μ„ μ—¬λŸ¬ 번 좜λ ₯ν•˜λ©΄ μ•ˆλ˜λ©°, 각 μˆ˜μ—΄μ€ 곡백으둜 κ΅¬λΆ„ν•΄μ„œ 좜λ ₯ν•΄μ•Ό ν•œλ‹€. μˆ˜μ—΄μ€ 사전 순으둜 μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ 좜λ ₯ν•΄ www.acmicpc.net [1] 문제 문제 μžμ—°μˆ˜ Nκ³Ό M이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μ•„λž˜ 쑰건을 λ§Œμ‘±ν•˜λŠ” 길이가 M인 μˆ˜μ—΄μ„ λͺ¨λ‘ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 1λΆ€ν„° NκΉŒμ§€ μžμ—°μˆ˜ μ€‘μ—μ„œ M개λ₯Ό κ³ λ₯Έ μˆ˜μ—΄ 같은 수λ₯Ό μ—¬λŸ¬ 번 골라도 λœλ‹€. μž…λ ₯ 첫째 쀄에 μžμ—°μˆ˜ Nκ³Ό M이 주어진닀. (1 ≤ M ≤ N ≤ 7) 좜λ ₯ ν•œ 쀄에 ν•˜λ‚˜μ”© 문제의 쑰건을 λ§Œμ‘±ν•˜λŠ” μˆ˜μ—΄μ„ 좜λ ₯ν•œλ‹€. μ€‘λ³΅λ˜λŠ” μˆ˜μ—΄μ„ μ—¬λŸ¬ 번 좜λ ₯ν•˜λ©΄ μ•ˆλ˜λ©°, 각 μˆ˜μ—΄μ€ ..

[C] Study : μˆ˜μ‹κ³Ό μ—°μ‚°μž - (6) μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„μ™€ κ²°ν•© κ·œμΉ™

μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„ • λ§Œμ•½ μ•„λž˜μ™€ 같이 ν•˜λ‚˜μ˜ μˆ˜μ‹μ΄ 2개 μ΄μƒμ˜ μ—°μ‚°μžλ₯Ό 가지고 μžˆλŠ” κ²½μš°μ—λŠ” μ–΄λ–€ μ—°μ‚°μžκ°€ λ¨Όμ € μˆ˜ν–‰λ  것인가? 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό 같은 λ¬Έμž₯μ—μ„œ κ°€μž₯ λ¨Όμ € μˆ˜ν–‰λ˜λŠ” 연산은 무엇인가? x + y * z • μš°λ¦¬λŠ” μˆ˜ν•™μ—μ„œ 배웠듯이 κ³±μ…ˆκ³Ό λ‚˜λˆ—μ…ˆμ΄ λ§μ…ˆκ³Ό λΊ„μ…ˆλ³΄λ‹€ λ¨Όμ € μˆ˜ν–‰λ˜μ–΄μ•Ό ν•œλ‹€. • μš°μ„ μˆœμœ„λŠ” λ§Žμ€ μ—°μ‚°λ“€ μ€‘μ—μ„œ μ–΄λ–€ 연산을 λ¨Όμ € μˆ˜ν–‰ν• μ§€λ₯Ό κ²°μ •ν•˜λŠ” κ·œμΉ™μ΄λ‹€. • 각 μ—°μ‚°μžλ“€μ€ μ„œμ—΄μ΄ 맀겨져 μžˆλ‹€. 즉 κ³±μ…ˆκ³Ό λ‚˜λˆ—μ…ˆμ€ λ§μ…ˆμ΄λ‚˜ λΊ„μ…ˆλ³΄λ‹€ μš°μ„ μˆœμœ„κ°€ λ†’λ‹€. • λ§Œμ•½ μ‚¬μš©μžκ°€ μ΄λŸ¬ν•œ μš°μ„ μˆœμœ„λŒ€λ‘œ 연산을 ν•˜μ§€ μ•Šκ³  λ‹€λ₯Έ μˆœμ„œλ‘œ ν•˜κ³  싢은 κ²½μš°λŠ” μ–΄λ–»κ²Œ ν•˜λ©΄ λ˜λŠ”κ°€? • μˆ˜ν•™μ—μ„œλ„ 배웠듯이 이 κ²½μš°μ—λŠ” κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. • Cμ—μ„œ μ‚¬μš©λ˜λŠ” λͺ¨λ“  μ—°μ‚°μžμ— λŒ€ν•œ μš°μ„ μˆœμœ„λ₯Ό ν‘œλ‘œ μ •λ¦¬ν•˜μ˜€λ‹€..

[C] Study : μˆ˜μ‹κ³Ό μ—°μ‚°μž - (5) λΉ„νŠΈ μ—°μ‚°μž

• λΉ„νŠΈ(bit): μ»΄ν“¨ν„°μ—μ„œ 정보λ₯Ό μ €μž₯ν•˜λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„ • 2μ§„μˆ˜μ˜ ν•œμžλ¦¬μ— ν•΄λ‹Ήν•˜λ―€λ‘œ 0 λ˜λŠ” 1의 값을 κ°€μ§ˆ 수 μžˆλ‹€. • λΉ„νŠΈ 8κ°œκ°€ λͺ¨μ΄λ©΄ λ°”μ΄νŠΈ(byte)κ°€ λœλ‹€. • 예λ₯Ό λ“€μ–΄μ„œ μ •μˆ˜ 10은 컴퓨터 μ•ˆμ—μ„œ λ‹€μŒκ³Ό 같은 32λΉ„νŠΈ νŒ¨ν„΄μœΌλ‘œ μ €μž₯λœλ‹€. μ •μˆ˜ 10을 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ©΄ μ‰½κ²Œ μ•Œ 수 μžˆλ‹€. 0000 0000 0000 0000 0000 0000 0000 1010 • μœ„μ˜ λΉ„νŠΈ νŒ¨ν„΄μ„ 16μ§„μˆ˜λ‘œ ν‘œμ‹œν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€. 0x000000A • 이것을 μ‰½κ²Œ λ³€ν™˜ν•˜λ €λ©΄ μœˆλ„μš°μ˜ "ν”„λ‘œκ·Έλž˜λ¨Έμš©" 계산기λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. • λΉ„νŠΈ μ—°μ‚°μžλŠ” λΉ„νŠΈλ³„λ‘œ AND μ—°μ‚°μ΄λ‚˜ OR 연산을 ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€. • λΉ„νŠΈ μ—°μ‚°μžλŠ” μ •μˆ˜ νƒ€μž…μ˜ ν”Όμ—°μ‚°μžμ—λ§Œ μ μš©ν•  수 μžˆλ‹€. • 즉, μ •μˆ˜ νƒ€μž…μ—λŠ” char, shor..

[C] Study : μˆ˜μ‹κ³Ό μ—°μ‚°μž - (4) 관계 μ—°μ‚°μž

• 관계 μ—°μ‚°μž (relational operator): 두 개의 ν”Όμ—°μ‚°μžλ₯Ό λΉ„κ΅ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. • 예λ₯Ό λ“€λ©΄, "λ³€μˆ˜ xκ°€ 0κ³Ό 같은가", "λ³€μˆ˜ yκ°€ 10보닀 더 μž‘μ€κ°€" 등을 λ”°μ§€λŠ”λ° μ‚¬μš©λœλ‹€. • 관계 μ—°μ‚°μžμ˜ κ²°κ³ΌλŠ” μ°Έ(true) μ•„λ‹ˆλ©΄ 거짓(false)으둜 κ³„μ‚°λœλ‹€. • Cμ—μ„œλŠ” μ•„λž˜μ˜ ν‘œμ™€ 같은 6κ°€μ§€μ˜ 관계 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€. • Cμ—μ„œ μ°Έκ³Ό 거짓은 1κ³Ό 0으둜 ν‘œμ‹œλœλ‹€. • μ˜ˆμ‹œ: 10 > 1 λΌλŠ” 관계식 --> 10이 1보닀 ν¬λ―€λ‘œ 이 μˆ˜μ‹μ€ 참을 μ˜λ―Έν•˜λŠ” μ •μˆ˜ κ°’ 1을 μƒμ„±ν•œλ‹€. • --> μˆ˜μ‹ 1 > 10은 거짓을 μ˜λ―Έν•˜λŠ” μ •μˆ˜ κ°’ 0을 μƒμ„±ν•œλ‹€. • 또 λ‹€λ₯Έ μ‚¬μš© μ˜ˆμ‹œ 1 == 2 // 1κ³Ό 2κ°€ λ‹€λ₯΄λ―€λ‘œ 거짓(0) 1 != 2 // 1와 2κ°€ λ‹€λ₯΄λ―€λ‘œ μ°Έ(1) 2 < 1 // ..

[C] Study : μˆ˜μ‹κ³Ό μ—°μ‚°μž - (3) λŒ€μž… μ—°μ‚°μž

• λŒ€μž…(ν• λ‹Ή, λ°°μ •) μ—°μ‚°μž (assignment operator): λ³€μˆ˜μ— 값을 μ €μž₯ν•˜κΈ° μœ„ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” μ—°μ‚°μž • κΈ°λŠ₯: 였λ₯Έμͺ½μ— μžˆλŠ” μˆ˜μ‹μ˜ 값을 κ³„μ‚°ν•˜μ—¬, μ™Όμͺ½μ˜ λ³€μˆ˜μ— μ €μž₯ν•œλ‹€. • μˆ˜ν•™μ—μ„œλŠ” =이 λ“±ν˜Έμ΄μ§€λ§Œ, Cμ—μ„œλŠ” λ³€μˆ˜μ— 값을 λŒ€μž…ν•˜λŠ” 의미둜 μ‚¬μš©λœλ‹€. • λ‹€μŒμ˜ λ¬Έμž₯은 μˆ˜ν•™μ μœΌλ‘œ 보면 잘λͺ»λœ λ¬Έμž₯이닀. xλŠ” x+1κ³Ό 같을 수 μ—†λ‹€. • κ·ΈλŸ¬λ‚˜ Cμ—μ„œλŠ” κ°€λŠ₯ν•œ λ¬Έμž₯이닀. x = x + 1; • μœ„μ˜ λ¬Έμž₯의 μ˜λ―ΈλŠ” λ³€μˆ˜ x의 값에 1을 λ”ν•˜μ—¬ κ·Έ 결괏값을 λ‹€μ‹œ λ³€μˆ˜ x에 λŒ€μž…ν•˜λΌλŠ” 것이닀. • λŒ€μž… μ—°μ‚°μžλŠ” μ—°μ†ν•΄μ„œ μ‚¬μš©λ  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄μ„œ λ³€μˆ˜ x, y, z에 0을 λŒ€μž…ν•˜λŠ” λ¬Έμž₯은 λ‹€μŒκ³Ό 같이 μž‘μ„±λ  수 μžˆλ‹€. x = y = z = 0; • z = 0이 λ¨Όμ € μ‹€ν–‰λ˜κ³  이 μˆ˜μ‹μ˜ 값인..

[C] Study : μˆ˜μ‹κ³Ό μ—°μ‚°μž - (2) μ‚°μˆ  μ—°μ‚°μž

• μ‚°μˆ  μ—°μ‚°μžλŠ” 기본적인 μ‚°μˆ  연산인 λ§μ…ˆ, λΊ„μ…ˆ, κ³±μ…ˆ, λ‚˜λˆ—μ…ˆ, λ‚˜λ¨Έμ§€ 연산을 μ‹€ν–‰ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€. • μ‚¬μš©μžμ—κ²Œμ„œ 2개의 μ •μˆ˜λ₯Ό λ°›μ•„μ„œ μ—¬λŸ¬ 가지 연산을 ν•œ 후에 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ‚΄νŽ΄λ³΄μž. #define _CRT_SECURE_NO_WARNINGS #include int main() { int x, y, result; printf("λ‘κ°œμ˜ μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€: "); scanf("%d %d", &x, &y); result = x + y; printf("%d + %d = %d\n", x, y, result); result = x - y; // λΊ„μ…ˆ printf("%d - %d = %d\n", x, y, result); result = x * y; // κ³±μ…ˆ printf("%d + %d = %..

[C] Study : μˆ˜μ‹κ³Ό μ—°μ‚°μž - (1) μˆ˜μ‹κ³Ό μ—°μ‚°μžμ˜ κ°œλ…

(1) μˆ˜μ‹κ³Ό μ—°μ‚°μžμ˜ κ°œλ… • μˆ˜μ‹ (expression): ν”Όμ—°μ‚°μžλ“€κ³Ό μ—°μ‚°μžμ˜ μ‘°ν•© • μ—°μ‚°μž (oprator): 연산을 λ‚˜νƒ€λ‚΄λŠ” 기호 • ν”Όμ—°μ‚°μž (operand): μ—°μ‚°μ˜ λŒ€μƒμ΄ λ˜λŠ” 것 μ—°μ‚°μžμ˜ λΆ„λ₯˜ • μ—°μ‚°μžλŠ” κΈ°λŠ₯에 따라 λ‹€μŒκ³Ό 같이 λΆ„λ₯˜ν•  수 μžˆλ‹€. • ν”Όμ—°μ‚°μžμ˜ μˆ˜μ— λ”°λΌμ„œ 단항, 이항, μ‚Όν•­ μ—°μ‚°μžλ‘œ λ‚˜λˆ„μ–΄μ§€κΈ°λ„ ν•œλ‹€. • CλŠ” μƒλ‹Ήνžˆ λ§Žμ€ μ’…λ₯˜μ˜ μ—°μ‚°μžλ₯Ό μ œκ³΅ν•˜λŠ”λ° 이런 ν’λΆ€ν•œ μ—°μ‚°μž 지원이 C의 큰 μž₯점이기도 ν•˜λ‹€. • μ œκ³΅ν•˜λŠ” μ—°μ‚°μžκ°€ λ§Žλ‹€λŠ” 것은 데이터λ₯Ό 가곡할 수 μžˆλŠ” λŠ₯λ ₯이 νƒμ›”ν•˜λ‹€λŠ” λœ»μ΄λ‹€. • μ—°μ‚°μžλ“€μ„ 자유자재둜 μ‚¬μš©ν•  수 있으면 λ³΅μž‘ν•œ 연산을 κ°„λ‹¨ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.

[C] Study: 동적 λ©”λͺ¨λ¦¬ - (3) ꡬ쑰체의 동적 생성을 ν•΄λ³΄μž

• ꡬ쑰체λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 곡간도 λ‹€μŒκ³Ό 같이 할당받을 수 μžˆλ‹€. • λ§Œμ•½ ꡬ쑰체의 배열이 ν•„μš”ν•˜λ©΄ ꡬ쑰체의 크기에닀 ν•„μš”ν•œ 개수λ₯Ό κ³±ν•΄μ£Όλ©΄ λœλ‹€. • μ•„λž˜μ˜ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” 책을 ν‘œν˜„ν•˜λŠ” ꡬ쑰체λ₯Ό μ •μ˜ν•˜κ³  ꡬ쑰체의 배열을 λ™μ μœΌλ‘œ μƒμ„±ν•œλ‹€. struct Book { int number; char title[100]; }; struct Book *p; p = (struct Book *)malloc(2 * sizeof(struct Book)); λ™μ μœΌλ‘œ μƒμ„±λœ ꡬ쑰체 배열은 포인터λ₯Ό ν†΅ν•΄μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλŠ” 점에 μœ μ˜ν•˜μž. p[0]λŠ” 첫 번째 ꡬ쑰체이고 p[1]은 두 번째 ꡬ쑰체이닀. #include #include #include struct Book { int number; char title[100]..

[C] Study: 동적 λ©”λͺ¨λ¦¬ - (2) malloc()κ³Ό free()

(2) malloc()κ³Ό free() • 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή μ ˆμ°¨μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž. • 동적 λ©”λͺ¨λ¦¬ 할당은 λ„μ„œκ΄€μ—μ„œ 책을 λΉŒλ¦¬λŠ” μ ˆμ°¨μ™€ λΉ„μŠ·ν•˜λ‹€. λ„μ„œκ΄€μ—μ„œλŠ” ν•„μš”ν•œ 책을 μ‹ μ²­ν•˜κ³  책이 μ€€λΉ„λ˜λ©΄ λ°›μ•„μ˜€λŠ” 단계가 ν•„μš”ν•˜λ‹€. μ±…μ˜ μ‚¬μš©μ΄ λλ‚˜λ©΄ 책을 λ‹€μ‹œ λ„μ„œκ΄€μœΌλ‘œ λ°˜λ‚©ν•˜λŠ” 단계가 ν•„μš”ν•˜λ‹€. • 동적 λ©”λͺ¨λ¦¬ 할당도 λ§ˆμ°¬κ°€μ§€μ΄λ‹€. • λ¨Όμ € μ–Όλ§ˆλ‚˜ 할당을 받을 것인지λ₯Ό κ²°μ •ν•˜κ³  라이브러리 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ 운영 μ²΄μ œμ—κ²Œ λ©”λͺ¨λ¦¬λ₯Ό μš”μ²­ν•˜λŠ” 단계가 ν•„μš”ν•˜λ‹€. λ§Œμ•½ μΆ©λΆ„ν•œ λ©”λͺ¨λ¦¬κ°€ μ‘΄μž¬ν•˜λ©΄ κ·Έ μš”μ²­μ€ 승인되고 λ©”λͺ¨λ¦¬κ°€ ν• λ‹Ήλœλ‹€. ν”„λ‘œκ·Έλž¨μ€ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•œλ‹€. μ‚¬μš©μ΄ λλ‚˜λ©΄ λ©”λͺ¨λ¦¬λ₯Ό λ‹€μ‹œ μš΄μ˜μ²΄μ œμ—κ²Œ λ°˜λ‚©ν•˜λŠ” 단계가 ν•„μš”ν•˜λ‹€. λ§Œμ•½ λ©”λͺ¨λ¦¬λ₯Ό λ°˜λ‚©ν•˜μ§€ μ•ŠμœΌλ©΄ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ΄ 동적 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•  수 μ—†κ²Œ 될 것이닀..

[C] Study: 동적 λ©”λͺ¨λ¦¬ - (1) 동적 ν• λ‹Ή λ©”λͺ¨λ¦¬λž€?

(1) 동적 ν• λ‹Ή λ©”λͺ¨λ¦¬λž€? • ν”„λ‘œκ·Έλž¨μ΄ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›λŠ” λ°©λ²•μ—λŠ” 정적(static)κ³Ό 동적(dynamic)의 두 가지 방법이 μžˆλ‹€. • 정적 λ©”λͺ¨λ¦¬ ν• λ‹Ή: ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λ˜κΈ° 전에 미리 정해진 크기의 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›λŠ” 것이닀. • 이 경우, λ©”λͺ¨λ¦¬μ˜ ν¬κΈ°λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λ˜κΈ° 전에 κ²°μ •λ˜λ©° ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑에 κ·Έ 크기가 변경될 μˆ˜λŠ” μ—†λ‹€. • 예λ₯Ό λ“€λ©΄ μ•„λž˜μ™€ 같이 배열을 μ„ μ–Έν•˜λ©΄ μ •μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›λŠ” 것이닀. int sarray[10]; • 정적 λ©”λͺ¨λ¦¬ ν• λ‹Ήμ˜ μž₯점: κ°„νŽΈν•˜λ‹€. • 정적 λ©”λͺ¨λ¦¬ ν• λ‹Ήμ˜ 단점: κ²½μš°μ— 따라 λΉ„νš¨μœ¨μ μΌ 수 μžˆλ‹€. • 예λ₯Ό λ“€λ©΄, ν”„λ‘œκ·Έλž¨μ΄ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” μž…λ ₯의 크기λ₯Ό 미리 μ•Œ 수 μ—†λŠ” 경우: λ§Œμ•½ μ²˜μŒμ— κ²°μ •λœ 크기보닀 더 λ§Žμ€ μž…λ ₯이 λ“€μ–΄μ˜¨λ‹€λ©΄ μ²˜λ¦¬ν•˜μ§€ λͺ»ν• ..