Repository: SurvivalCodingCampus/modu-3-dart-study
Pull request #68: 250312_19_김태욱
Author: login: Taeuk9977
Created: 2025-03-12T12:04:15Z | Merged: 2025-03-13T01:56:03Z

## 📝 과제 정보
Git 브랜치, for문,if문 사용

## ✅ 구현 내용
배수, 소수 알고리즘

## 🔍 구현 방법

1. 이 문제는 3의 배수일 때와 5의 배수일 때만 for문을 돌려서 숫자의 합이 나오게 됩니다.

2. if문을 소수는 1이면 false, 2 or 3 이면 true

2로 나눴을때 나머지가 0이나오면 소수가 아니므로 false

그리고 for문을 3부터시작해 제곱근까지만 검사하고

3부터 짝수는 소수가 아니기에 2씩 더해준다.

이중에 number가 i로 나눠지면 소수가 아니므로 if문을 돌려 

나머지가 0이면 false 아니면 true를 반환 
## 📷 실행 결과

![image](https://github.com/user-attachments/assets/9632525a-a5bd-4d10-bdc8-2b425da020ec)
![image](https://github.com/user-attachments/assets/7c1744e3-b657-4fd5-aaef-c3dc6998f9a5)


## 🚨 어려웠던 점

브랜치 merge, rebase가 어려웠고 알고리즘 이해하는데 어려웠습니다.

## 💡 배운 점

브랜치 연습많이 해보고 반복하자.


## 🔄 자체 평가 & 회고
한번 했다고 놓지말고 다시 복습하자



<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
	- 추가된 계산 기능을 통해 지정한 제한 내에서 특정 배수를 합산할 수 있습니다.
	- 숫자의 소수 여부를 판단하고 결과를 출력하는 기능이 도입되었습니다.
- **Documentation**
	- 버전 관리 및 소프트웨어 개발 주요 개념에 관한 가이드 문서가 새롭게 제공됩니다.
	- 과제 안내 자료와 한국어 Git 명령어 목록이 포함된 참고 문서가 추가되었습니다.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/TIL/daily/2025-03-12.md b/TIL/daily/2025-03-12.md
new file mode 100644
index 00000000..d271e907
--- /dev/null
+++ b/TIL/daily/2025-03-12.md
@@ -0,0 +1,82 @@
+# 부트캠프3일차
+
+### 오늘의 트러블슈팅
+
+![image.png](attachment:7523b27b-6477-4869-abbb-e5fc905fdbfd:image.png)
+
+→32비트 실행파일인 studio.bat을 사용하였더니 경고 메세지가 떴다. 64비트 studio64.exe를 사용하자.
+
+### 브랜치
+
+- 이력의 흐름을 분기해 기록해 가기 위한 것
+- 운영,전환,통합의 과정을 거친다.
+
+### head
+
+- 내가 현재 작업하고 있는 꼭대기
+
+### merge
+
+- 여러 히스토리의 흐름을 결합할 수 있다.
+
+※ 병합하는쪽에서 브랜치를 바꿔야한다. ex) branch1을 마스터로 병합하고싶다 마스터로 브랜치 변경후 병합.
+
+### rebase
+
+- 모든 변경사항을 하나의 패치로 압축한다.
+- 공용 리퍼지토리를 리베이스하는 것은 팀으로 작업할떄 위험할 수 있다.
+
+### 리눅스
+
+`echo`
+
+→ 문자열을 출력할 때 사용
+
+`>`
+
+→ 덮어쓰기
+
+`>>`
+
+→ 추가하기
+
+### 풀
+
+- 리모트저장소의 변경사항을 로컬에 합친다.
+
+### fetch
+
+- 리모트저장소의 이력만 확인한다
+
+### 태그
+
+- 커밋을 쉽게 참조할 수 있도록 이름을 지정한다
+
+### reset
+
+- 특정 커밋으로 돌아갈때 사용
+- 푸시를 안해놓고  reset을 하면 그전에 작업했던 로컬데이터가 날라간다.
+
+### cherry-pick
+
+- 특정 커밋 하나만 골라서 현재 브랜치에 적용하는 명령
+
+### 커밋 내역 재작성
+
+- rebase에 i 옵션을 지정하면 커밋을 다시 작성, 교체, 삭제 및 통합할 수 있습니다.
+
+### **컴파일타임(Compile Time)**
+
+- 코드가 실행되기 전에 **번역(컴파일)되는 과정**
+
+### **런타임(Runtime)**
+
+- 프로그램이 실제로 **실행되는 동안의 과정**
+
+### const
+
+- 컴파일타임 상수
+
+### final
+
+- 런타임 상수
\ No newline at end of file
diff --git a/assignments/2025-03-12/src/solution1/basic1.dart b/assignments/2025-03-12/src/solution1/basic1.dart
new file mode 100644
index 00000000..e6b7479b
--- /dev/null
+++ b/assignments/2025-03-12/src/solution1/basic1.dart
@@ -0,0 +1,16 @@
+int sumOfMultiples(int limit) {
+  // for문과 if문을 사용하여 구현하세요
+
+  int sum = 0;
+  for (int i = 1; i < limit; i++){
+    if (i % 3 == 0 || i % 5 == 0) {
+      sum += i;
+    }
+  }
+  return sum;
+}
+
+void main() {
+  print(sumOfMultiples(10)) ;// 23이 출력되어야 합니다 (3 + 5 + 6 + 9 = 23)
+  print(sumOfMultiples(20)); // 78이 출력되어야 합니다
+}
\ No newline at end of file
diff --git a/assignments/2025-03-12/src/solution1/basic1.md b/assignments/2025-03-12/src/solution1/basic1.md
new file mode 100644
index 00000000..6c67254b
--- /dev/null
+++ b/assignments/2025-03-12/src/solution1/basic1.md
@@ -0,0 +1,3 @@
+# 과제 설명
+
+이 문제는 3의 배수일 때와 5의 배수일 때만 for문을 돌려서 숫자의 합이 나오게 됩니다.
\ No newline at end of file
diff --git a/assignments/2025-03-12/src/solution2/basic2.dart b/assignments/2025-03-12/src/solution2/basic2.dart
new file mode 100644
index 00000000..aeb42107
--- /dev/null
+++ b/assignments/2025-03-12/src/solution2/basic2.dart
@@ -0,0 +1,22 @@
+bool isPrime(int number) {
+  if (number < 2) {
+    return false;
+  }
+  if (number == 2 || number == 3) {
+    return true;
+  }
+  if (number % 2 == 0) {
+    return false;
+  }
+  for (int i = 3; i * i <= number; i += 2) {
+    if (number % i == 0) {
+      return false;
+    }
+  }
+  return true;
+}
+void main() {
+  print(isPrime(7)); // true가 출력되어야 합니다
+  print(isPrime(12)); // false가 출력되어야 합니다
+  print(isPrime(23)); // true가 출력되어야 합니다
+}
\ No newline at end of file
diff --git a/assignments/2025-03-12/src/solution2/basic2.md b/assignments/2025-03-12/src/solution2/basic2.md
new file mode 100644
index 00000000..27a0d0fb
--- /dev/null
+++ b/assignments/2025-03-12/src/solution2/basic2.md
@@ -0,0 +1,15 @@
+# 과제 설명
+
+if문을 소수는 1이면 false, 2 or 3 이면 true
+
+2로 나눴을때 나머지가 0이나오면 소수가 아니므로 false
+
+그리고 for문을 3부터시작해 제곱은 소수가 아니므로 제곱은 제하고
+
+3부터 짝수는 소수가 아니기에 2씩 더해준다.
+
+이중에 number가 i로 나눠지면 소수가 아니므로 if문을 돌려 
+
+나머지가 0이면 false 아니면 true를 반환
+
+
diff --git a/lib/2025-03-12/myfile.txt b/lib/2025-03-12/myfile.txt
new file mode 100644
index 00000000..6d028a86
--- /dev/null
+++ b/lib/2025-03-12/myfile.txt
@@ -0,0 +1,5 @@
+원숭이 선생님의 Git 명령
+add 변경을 인덱스에 등록
+commit 인덱스의 상태를 기록합니다.
+pull 원격 리포지토리의 내용을 가져옵니다.
+


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 2**

<details>
<summary>🧹 Nitpick comments (11)</summary><blockquote>

<details>
<summary>lib/2025-03-12/myfile.txt (2)</summary><blockquote>

`1-5`: **Git 명령어 목록 추가 확인**

Git의 기본 명령어들이 한국어로 잘 설명되어 있습니다. 다만, 좀 더 많은 Git 명령어(예: branch, merge, rebase, checkout 등)를 추가하면 더 유용한 참고 자료가 될 것 같습니다.

---

`6-6`: **불필요한 줄 제거 필요**

6번째 줄에 숫자 "6"만 있는 것은 의도하지 않은 것으로 보입니다. 이 줄은 삭제하는 것이 좋겠습니다.

</blockquote></details>
<details>
<summary>assignments/2025-03-12/src/solution1/basic1.md (1)</summary><blockquote>

`1-3`: **과제 설명 보완 필요**

현재 설명은 간략하게만 되어 있습니다. 다음과 같은 내용을 추가하면 더 명확해질 것 같습니다:
1. 입력값(limit)의 의미와 제약조건
2. 출력 결과에 대한 구체적인 설명
3. 몇 가지 예시 케이스와 기대 결과값

또한 "3의 배수일 때와 5의 배수일 때만 for문을 돌려서"라는 표현은 정확하지 않습니다. for문은 모든 숫자를 순회하되, 3 또는 5의 배수인 경우에만 합산한다는 것이 더 정확한 설명입니다.

</blockquote></details>
<details>
<summary>assignments/2025-03-12/src/solution1/basic1.dart (2)</summary><blockquote>

`1-11`: **함수 구현이 잘 되었습니다**

`sumOfMultiples` 함수의 구현이 정확하고 효율적입니다. 주어진 문제를 for 루프와 if 조건문을 사용하여 적절히 해결했습니다.

다음은 몇 가지 개선할 수 있는 부분입니다:

1. 함수에 간단한 문서 주석(doc comment)을 추가하여 함수의 목적, 매개변수, 반환값을 설명하면 좋을 것 같습니다.

2. 경계 조건(예: 음수 입력)에 대한 처리가 없습니다. 이런 경우 예외 처리나 기본값 설정을 고려해 볼 수 있습니다.

```dart
/// 주어진 limit보다 작은 모든 3 또는 5의 배수의 합을 계산합니다.
/// 
/// [limit]: 계산할 상한값 (이 값은 포함되지 않음)
/// 반환값: 모든 3 또는 5의 배수의 합
int sumOfMultiples(int limit) {
  if (limit <= 0) return 0; // 경계 조건 처리
  
  int sum = 0;
  for (int i = 1; i < limit; i++) {
    if (i % 3 == 0 || i % 5 == 0) {
      sum += i;
    }
  }
  return sum;
}
```

---

`13-16`: **테스트 케이스에 설명 추가 필요**

현재 main 함수의 테스트 케이스는 기본적인 기능 확인에 적합합니다. 다음과 같이 각 테스트 케이스에 대한 설명을 추가하고, 경계 조건에 대한 테스트도 포함하면 더 좋을 것 같습니다:

```dart
void main() {
  // 기본 테스트 케이스
  print('limit=10일 때: ${sumOfMultiples(10)}'); // 23이 출력되어야 합니다 (3 + 5 + 6 + 9 = 23)
  print('limit=20일 때: ${sumOfMultiples(20)}'); // 78이 출력되어야 합니다
  
  // 경계 조건 테스트
  print('limit=0일 때: ${sumOfMultiples(0)}');  // 0이 출력되어야 합니다
  print('limit=1일 때: ${sumOfMultiples(1)}');  // 0이 출력되어야 합니다 (1 미만의 수 중 3 또는 5의 배수는 없음)
  print('limit=3일 때: ${sumOfMultiples(3)}');  // 3이 출력되어야 합니다 (3 미만의 수 중 3의 배수는 없고, 5의 배수는 없음)
}
```

</blockquote></details>
<details>
<summary>assignments/2025-03-12/src/solution2/basic2.dart (2)</summary><blockquote>

`1-17`: **알고리즘이 효율적으로 구현되었습니다.**

소수 판별 함수가 최적화되어 구현되었습니다. 특히 다음 최적화 기법들이 잘 적용되었습니다:
1. 2보다 작은 수는 소수가 아님
2. 2와 3은 소수임
3. 짝수는 소수가 아님 (2 제외)
4. 홀수인 경우 제곱근까지만 확인하는 최적화

다만, 알고리즘에 대한 설명 주석을 추가하면 코드의 가독성과 유지보수성이 더 향상될 것입니다.



```diff
 bool isPrime(int number) {
+  // 2보다 작은 수는 소수가 아님
   if (number < 2) {
     return false;
   }
+  // 2와 3은 소수임
   if (number == 2 || number == 3) {
     return true;
   }
+  // 2를 제외한 모든 짝수는 소수가 아님
   if (number % 2 == 0) {
     return false;
   }
+  // 홀수인 경우 제곱근까지만 확인 (최적화)
   for (int i = 3; i * i <= number; i += 2) {
     if (number % i == 0) {
       return false;
     }
   }
   return true;
 }
```

---

`18-22`: **테스트 케이스가 기본적인 시나리오를 잘 다루고 있습니다.**

테스트 케이스가 소수인 경우(7, 23)와 소수가 아닌 경우(12)를 모두 포함하고 있어 좋습니다.
하지만 경계값 테스트 케이스를 추가하면 함수의 정확성을 더 확실히 검증할 수 있을 것입니다.



```diff
 void main() {
   print(isPrime(7)); // true가 출력되어야 합니다
   print(isPrime(12)); // false가 출력되어야 합니다
   print(isPrime(23)); // true가 출력되어야 합니다
+  // 경계값 테스트 추가
+  print(isPrime(0)); // false가 출력되어야 합니다
+  print(isPrime(1)); // false가 출력되어야 합니다
+  print(isPrime(2)); // true가 출력되어야 합니다
+  print(isPrime(3)); // true가 출력되어야 합니다
+  print(isPrime(4)); // false가 출력되어야 합니다
+  print(isPrime(9)); // false가 출력되어야 합니다 (3의 제곱)
+  print(isPrime(25)); // false가 출력되어야 합니다 (5의 제곱)
 }
```

</blockquote></details>
<details>
<summary>TIL/daily/2025-03-12.md (4)</summary><blockquote>

`1-3`: **제목 구조를 개선해주세요.**

마크다운 문서의 제목 계층 구조가 올바르게 설정되지 않았습니다. 현재 h1(#) 다음에 바로 h3(###)이 사용되고 있습니다. 제목 계층은 한 번에 한 단계씩만 증가해야 합니다.


```diff
 # 부트캠프3일차
 
-### 오늘의 트러블슈팅
+## 오늘의 트러블슈팅
```

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

3-3: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)

</details>

</details>

---

`9-28`: **Git 관련 개념들의 설명이 명확합니다.**

브랜치, head, merge, rebase 등의 Git 개념에 대한 설명이 간결하고 명확합니다. 특히 merge 사용 시 주의사항에 대한 설명은 매우 유용합니다.
다만, 관련 Git 명령어 예시를 추가하면 더 실용적인 문서가 될 것입니다.



```diff
 ### 브랜치
 
 - 이력의 흐름을 분기해 기록해 가기 위한 것
 - 운영,전환,통합의 과정을 거친다.
+- 명령어: `git branch <브랜치명>` (브랜치 생성), `git checkout <브랜치명>` (브랜치 전환)
 
 ### head
 
 - 내가 현재 작업하고 있는 꼭대기
+- 확인 명령어: `git log --oneline --decorate`
 
 ### merge
 
 - 여러 히스토리의 흐름을 결합할 수 있다.
+- 명령어: `git merge <브랜치명>`
 
 ※ 병합하는쪽에서 브랜치를 바꿔야한다. ex) branch1을 마스터로 병합하고싶다 마스터로 브랜치 변경후 병합.
 
 ### rebase
 
 - 모든 변경사항을 하나의 패치로 압축한다.
 - 공용 리퍼지토리를 리베이스하는 것은 팀으로 작업할떄 위험할 수 있다.
+- 명령어: `git rebase <브랜치명>`
```

---

`29-82`: **문서의 구조와 내용을 개선해주세요.**

리눅스 명령어, Git 명령어, 프로그래밍 개념이 혼합되어 있습니다. 관련 개념들을 그룹화하여 구성하면 가독성이 향상될 것입니다. 또한 일부 개념에 대한 설명이 간략한데, 더 자세한 설명이나 예시를 추가하면 좋을 것 같습니다.


문서를 다음과 같이 재구성해보세요:

```diff
-### 리눅스
+## Git 명령어 모음
+
+### 브랜치
+
+- 이력의 흐름을 분기해 기록해 가기 위한 것
+- 운영,전환,통합의 과정을 거친다.
+- 명령어: `git branch <브랜치명>` (브랜치 생성), `git checkout <브랜치명>` (브랜치 전환)
+
+### head
+
+- 내가 현재 작업하고 있는 꼭대기
+- 확인 명령어: `git log --oneline --decorate`
+
+### merge
+
+- 여러 히스토리의 흐름을 결합할 수 있다.
+- 명령어: `git merge <브랜치명>`
+
+※ 병합하는쪽에서 브랜치를 바꿔야한다. ex) branch1을 마스터로 병합하고싶다 마스터로 브랜치 변경후 병합.
+
+### rebase
+
+- 모든 변경사항을 하나의 패치로 압축한다.
+- 공용 리퍼지토리를 리베이스하는 것은 팀으로 작업할떄 위험할 수 있다.
+- 명령어: `git rebase <브랜치명>`
+
+### 풀
+
+- 리모트저장소의 변경사항을 로컬에 합친다.
+- 명령어: `git pull origin <브랜치명>`
+
+### fetch
+
+- 리모트저장소의 이력만 확인한다
+- 명령어: `git fetch origin`
+
+### 태그
+
+- 커밋을 쉽게 참조할 수 있도록 이름을 지정한다
+- 명령어: `git tag <태그명> [커밋ID]`
+
+### reset
+
+- 특정 커밋으로 돌아갈때 사용
+- 푸시를 안해놓고 reset을 하면 그전에 작업했던 로컬데이터가 날라간다.
+- 명령어: `git reset --hard <커밋ID>`
+
+### cherry-pick
+
+- 특정 커밋 하나만 골라서 현재 브랜치에 적용하는 명령
+- 명령어: `git cherry-pick <커밋ID>`
+
+### 커밋 내역 재작성
+
+- rebase에 i 옵션을 지정하면 커밋을 다시 작성, 교체, 삭제 및 통합할 수 있습니다.
+- 명령어: `git rebase -i HEAD~n` (최근 n개의 커밋 재작성)
+
+## 리눅스 명령어

 `echo`
 
 → 문자열을 출력할 때 사용
+- 예시: `echo "Hello World"`
 
 `>`
 
 → 덮어쓰기
+- 예시: `echo "Hello" > file.txt`
 
 `>>`
 
 → 추가하기
+- 예시: `echo "World" >> file.txt`
 
-### 풀
-
-- 리모트저장소의 변경사항을 로컬에 합친다.
-
-### fetch
-
-- 리모트저장소의 이력만 확인한다
-
-### 태그
-
-- 커밋을 쉽게 참조할 수 있도록 이름을 지정한다
-
-### reset
-
-- 특정 커밋으로 돌아갈때 사용
-- 푸시를 안해놓고  reset을 하면 그전에 작업했던 로컬데이터가 날라간다.
-
-### cherry-pick
-
-- 특정 커밋 하나만 골라서 현재 브랜치에 적용하는 명령
-
-### 커밋 내역 재작성
-
-- rebase에 i 옵션을 지정하면 커밋을 다시 작성, 교체, 삭제 및 통합할 수 있습니다.
-
-### **컴파일타임(Compile Time)**
+## 프로그래밍 개념
+
+### 컴파일타임(Compile Time)
 
 - 코드가 실행되기 전에 **번역(컴파일)되는 과정**
 
-### **런타임(Runtime)**
+### 런타임(Runtime)
 
 - 프로그램이 실제로 **실행되는 동안의 과정**
 
 ### const
 
 - 컴파일타임 상수
+- 예시: `const int a = 10;`
 
 ### final
 
 - 런타임 상수
+- 예시: `final int b = getValue();`
```

위와 같이 관련 개념끼리 그룹화하고, 각 명령어나 개념에 대해 실제 예시를 추가하면 문서의 가독성과 유용성이 크게 향상될 것입니다.

---

`68-82`: **프로그래밍 개념에 Dart 언어 관련 예시를 추가해보세요.**

컴파일타임, 런타임, const, final 등의 개념 설명은 좋습니다만, Dart 언어 예시와 함께 설명하면 더 실용적일 것 같습니다.


```diff
 ### **컴파일타임(Compile Time)**
 
 - 코드가 실행되기 전에 **번역(컴파일)되는 과정**
+- Dart에서 `const` 값은 컴파일타임에 결정됨
 
 ### **런타임(Runtime)**
 
 - 프로그램이 실제로 **실행되는 동안의 과정**
+- Dart에서 `final` 값은 런타임에 결정될 수 있음
 
 ### const
 
 - 컴파일타임 상수
+- 예시: `const pi = 3.14;`
+- 컴파일 시점에 값이 확정되어야 함
+- 값을 변경할 수 없음
 
 ### final
 
 - 런타임 상수
+- 예시: `final now = DateTime.now();`
+- 초기화 후에는 값을 변경할 수 없음
+- 런타임에 값이 결정될 수 있음
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 94494ff831cc510b70638e8839cfb706cfa5dbdf and a5733a1c03d7cdfecf1ca1344ad7c123ef5a10dd.

</details>

<details>
<summary>📒 Files selected for processing (6)</summary>

* `TIL/daily/2025-03-12.md` (1 hunks)
* `assignments/2025-03-12/src/solution1/basic1.dart` (1 hunks)
* `assignments/2025-03-12/src/solution1/basic1.md` (1 hunks)
* `assignments/2025-03-12/src/solution2/basic2.dart` (1 hunks)
* `assignments/2025-03-12/src/solution2/basic2.md` (1 hunks)
* `lib/2025-03-12/myfile.txt` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

<details>
<summary>TIL/daily/2025-03-12.md</summary>

3-3: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)

</details>

</details>

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: CHANGES_REQUESTED
author_association: NONE
submitted_at: 2025-03-12T12:08:00Z

Review comments:
diff_hunk: @@ -0,0 +1,15 @@
+# 과제 설명
+
+if문을 소수는 1이면 false, 2 or 3 이면 true
+
+2로 나눴을때 나머지가 0이나오면 소수가 아니므로 false
+
+그리고 for문을 3부터시작해 제곱은 소수가 아니므로 제곱은 제하고
+
+3부터 짝수는 소수가 아니기에 2씩 더해준다.
+
+이중에 number가 i로 나눠지면 소수가 아니므로 if문을 돌려 
+
+나머지가 0이면 false 아니면 true를 반환
+
path: assignments/2025-03-12/src/solution2/basic2.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**소수 판별 알고리즘 설명 개선 필요**

소수 판별 알고리즘에 대한 설명이 다소 불명확합니다.

1. 9줄의 "3부터 짝수는 소수가 아니기에"라는 설명은 정확하지 않습니다. 짝수 중에서는 2만 소수이고, 나머지 짝수(4, 6, 8...)는 소수가 아닙니다.

2. 7-8줄의 "제곱은 소수가 아니므로 제곱은 제하고"라는 설명도 모호합니다. 완전 제곱수가 모두 소수가 아닌 것은 맞지만, 이것이 알고리즘에서 어떻게 구현되는지 명확하지 않습니다.

3. 전체적인 알고리즘 흐름을 단계별로 더 명확하게 설명하면 이해하기 쉬울 것 같습니다.

다음과 같이 설명을 개선해 보세요:
```
1. 숫자가 2보다 작으면 소수가 아니므로 false 반환
2. 숫자가 2 또는 3이면 소수이므로 true 반환
3. 숫자가 2로 나누어 떨어지면 소수가 아니므로 false 반환
4. 3부터 시작해서 숫자의 제곱근까지 홀수로만 나누어보며 검사 (짝수는 이미 2단계에서 걸러짐)
5. 나누어 떨어지는 수가 있으면 소수가 아니므로 false 반환
6. 위 조건을 모두 통과하면 소수이므로 true 반환
```

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-12T12:07:59Z
author_association: NONE
diff_hunk: @@ -0,0 +1,82 @@
+# 부트캠프3일차
+
+### 오늘의 트러블슈팅
+
+![image.png](attachment:7523b27b-6477-4869-abbb-e5fc905fdbfd:image.png)
+
+→32비트 실행파일인 studio.bat을 사용하였더니 경고 메세지가 떴다. 64비트 studio64.exe를 사용하자.
path: TIL/daily/2025-03-12.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**이미지 참조 방식을 수정해주세요.**

현재 이미지 참조가 비표준 마크다운 형식(`attachment:`)을 사용하고 있습니다. 이 형식은 일부 마크다운 렌더러에서는 작동하지 않을 수 있습니다. 상대 경로나 절대 경로를 사용하는 표준 마크다운 이미지 참조로 변경하는 것이 좋습니다.


```diff
-![image.png](attachment:7523b27b-6477-4869-abbb-e5fc905fdbfd:image.png)
+![image.png](../images/studio_warning.png)
 
 →32비트 실행파일인 studio.bat을 사용하였더니 경고 메세지가 떴다. 64비트 studio64.exe를 사용하자.
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
![image.png](../images/studio_warning.png)

→32비트 실행파일인 studio.bat을 사용하였더니 경고 메세지가 떴다. 64비트 studio64.exe를 사용하자.
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-12T12:07:59Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-03-12T12:07:56Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough
여러 파일이 새로 추가되거나 업데이트되었습니다. TIL 디렉토리에서는 소프트웨어 개발 및 버전 관리 관련 개념(예: 브랜치, 머지, 리베이스, Git 명령어 등)을 설명하는 문서가 추가되었습니다. assignments 디렉토리에서는 두 가지 솔루션 파일이 추가되어, 하나는 3 또는 5의 배수를 합산하는 함수와 관련 예제, 다른 하나는 소수 판별 함수를 구현하는 코드와 예제를 포함합니다. 또한, 각 솔루션에 대한 설명 마크다운 파일과 Git 명령어 목록이 담긴 텍스트 파일이 추가되었습니다.

## Changes

| 파일 | 변경 내용 |
| --- | --- |
| `TIL/.../2025-03-12.md` | 소프트웨어 개발 및 버전 관리 개념 문서 추가 (32비트/64비트 실행파일, 브랜치, 머지, 리베이스, Git 명령어 등 설명) |
| `assignments/.../solution1/basic1.dart` <br> `assignments/.../solution1/basic1.md` | `sumOfMultiples` 함수와 관련 `main` 함수 추가, 3과 5의 배수 합산 로직 및 할당 설명 문서 추가 |
| `assignments/.../solution2/basic2.dart` <br> `assignments/.../solution2/basic2.md` | `isPrime` 함수와 관련 `main` 함수 추가, 소수 판별 로직 구현 및 설명 문서 추가 |
| `lib/.../myfile.txt` | Git 명령어 목록(예: add, commit, pull) 포함 텍스트 파일 추가 |

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=SurvivalCodingCampus/modu-3-dart-study&utm_content=68):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: junsuk5
created_at: 2025-03-12T12:16:14Z
body: PR 내용에 과제 정답을 올리면 안 됩니다.
구현 방법을 어떻게 접근했는지 말로 쓰시면 됩니다.
author_association: CONTRIBUTOR
user: login: Taeuk9977
created_at: 2025-03-12T20:37:34Z
body: > PR 내용에 과제 정답을 올리면 안 됩니다. 구현 방법을 어떻게 접근했는지 말로 쓰시면 됩니다.

알겠습니다.
author_association: NONE