C언어
💡 0의 의미
- ‘\0’ : 문자로써의 0
- 0 : 숫자로써의 0
- null : 포인터로써의 0
Chapter 26
문제 1. 문장의 길이를 반환하는 함수 생성
// Chapter 26 Problem 1
#include <stdio.h>
// 문제 : 문장의 길이를 반환하는 함수를 만들어주세요.(get_str_len)
int get_str_len(char* str) {
int len = 0;
while (true) {
if(str[len] == NULL) { // '\\0' = NULL
return len;
}
len++;
}
}
int main(void) {
char name[100] = "Paul"; // name 배열에 Paul 설정
int len = get_str_len(name);
printf("len : %d\\n", len);
// 출력 => len : 4
name[0] = 't';
name[1] = 'o';
name[2] = 'm';
name[3] = 'a';
name[4] = 's';
name[5] = '\\0';
len = get_str_len(name);
printf("len : %d\\n", len);
// 출력 => len : 5
return 0;
}
문제 2. 문장에서 특정 문자의 위치를 반환하는 함수 생성
// Chapter 26 Problem 2
// 문제 : 문장에서 특정 문자의 위치를 반환하는 함수를 만들어주세요.(get_index_of_c)
#include <stdio.h>
int get_index_of_c (char* str, char c ) {
for ( int i = 0; str[i] != '\\0'; i++ ) { // null 값이 나올 때 까지 진행
if ( str[i] == c ) { // 만약 문자열 중 해당 문자와 같다면
return i; // 해당 index 반환
}
}
return -1; // 없다면 -1 반환
}
int main(void) {
int index;
index = get_index_of_c("abc", 'b');
printf("index : %d\\n", index);
// 출력 => index : 1
index = get_index_of_c("test", 's');
printf("index : %d\\n", index);
// 출력 => index : 2
index = get_index_of_c("test", 'x');
printf("index : %d\\n", index);
// 출력 => index : -1
return 0;
}
강사님 문제. 문자열과 문자열을 비교하여 시작 index 출력
💡 strstr : 문자열 안에서 문자열을 검색 풀이
- 문자열끼리 비교 후 있으면 진행, 없으면 -1 반환
- 두 문자열을 비교하고, return을 사용하여 첫 번째로 같은 부분의 index 반환
+counting으로 순차적인 문자열인지 확인하여 출력할 수 있는 알고리즘 구현해보기
#include <stdio.h>
int get_index_of_word(char* str, char* c) {
for ( int i = 0; str[i] != '\\0'; i++ ) {
for (int j = 0; c[j] != '\\0'; j++) {
if ( strstr(str, c) != NULL ) {
if (str[i] == c[j]) {
return i;
}
}
}
}
return -1;
}
int main(void) {
int index;
index = get_index_of_word("abcd", "b");
printf("index : %d\\n", index);
index = get_index_of_word("abcd", "bc");
printf("index : %d\\n", index);
index = get_index_of_word("abcd", "bcd");
printf("index : %d\\n", index);
index = get_index_of_word("abcd", "bd");
printf("index : %d\\n", index);
index = get_index_of_word("abcd", "abcd");
printf("index : %d\\n", index);
index = get_index_of_word("abcd", "d");
printf("index : %d\\n", index);
return 0;
}
문제 3. 문장에서 특정 부분만 잘라서 출력하는 함수 생성
// Chapter 26 Problem 3
// 문제 : 문장에서 특정 부분만 잘라서 출력하는 함수를 만들어주세요.(print_sub_str)
#include <stdio.h>
void print_sub_str(char* c, int a, int b) {
for (int i = a; i < a + b; i++) { // 지정한 시작점부터 총 길이까지
if (c[i] == '\\0') { // 3번째 문항에서 3번째 인자가 10 이므로 멈춰주는 조건 진행
break;
}
printf("%c", c[i]);
}
printf("\\n");
}
int main(void) {
print_sub_str("abcd", 2, 2);
// 출력 => cd
print_sub_str("abcd", 1, 3);
// 출력 => bcd
print_sub_str("abcd", 1, 10);
// 출력 => bcd
print_sub_str("abcd", 0, 2);
// 출력 => ab
return 0;
}
Java
Chapter 14. 생성자
문제 1. 플레이어가 어떤 공격을 할지 플레이어 직업에 따라 다르게 출력
💡 메소드 오버라이딩
- 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시
정의하는 것
애너테이션
- 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
public class c14p1 {
public static void main(String[] args) {
캐릭터 a플레이어_캐릭터;
a플레이어_캐릭터 = new 전사();
a플레이어_캐릭터.공격();
// 출력 : 전사가 대검으로 공격합니다.
a플레이어_캐릭터 = new 마법사();
a플레이어_캐릭터.공격();
// 출력 : 마법사가 파이어볼로 공격합니다.
}
}
class 캐릭터 {
void 공격() {
System.out.println("공격!");
}
}
class 전사 extends 캐릭터 {
@Override // 오버라이드 애너테이션
void 공격() {
System.out.println("전사가 대검으로 공격합니다.");
}
}
class 마법사 extends 캐릭터 {
@Override
void 공격() {
System.out.println("마법사가 파이어볼로 공격합니다.");
}
}
문제 2. 생성자를 사용해 전사의 기본 이름을 No Name으로 지정
💡 생성자
- new 연산자를 통해 인스턴스를 생성할 때 반드시 호출되고, 가장 먼저 실행되는 일종의 메소드
- 하지만 메소드X
- Default 값 지정
public class c14p2 {
public static void main(String[] args) {
전사2 a전사0 = new 전사2();
a전사0.나이 = 20;
a전사0.이름 = "칸"; // 이름 지정
a전사0.성격 = "차가움";
a전사0.a무기 = new 활();
전사2 a전사1 = new 전사2();
전사2 a전사2 = new 전사2();
전사2 a전사3 = new 전사2();
전사2 a전사4 = new 전사2();
전사2 a전사5 = new 전사2();
System.out.println(a전사0.이름);
// 출력 : 칸
System.out.println(a전사1.이름);
// 출력 : No Name
System.out.println(a전사2.이름);
// 출력 : No Name
System.out.println(a전사3.이름);
// 출력 : No Name
System.out.println(a전사4.이름);
// 출력 : No Name
System.out.println(a전사5.이름);
// 출력 : No Name
}
}
class 전사2 {
int 나이;
String 이름;
String 성격;
무기 a무기;
전사2() { // 생성자
이름 = "No Name";
}
}
class 무기 {
}
class 활 extends 무기 {
}
문제 3. 팔을 생성할 때 자동으로 길이 세팅
public class c14p3 {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.나이 = 10;
a사람.a왼팔 = new 팔();
System.out.println(a사람.a왼팔.길이 + "cm");
// 출력 : 100cm
}
}
class 사람 {
int 나이;
팔 a왼팔;
}
class 팔 {
int 길이;
팔() { // 생성자를 사용하여 팔의 길이 지정
길이 = 100;
}
}
문제 4. 사람이 생성할 때 자동으로 a왼팔 변수에 팔 객체가 연결되도록
public class c14p4 {
public static void main(String[] args) {
new 사람().걷다();
System.out.println(new 사람().a왼팔.길이 + "cm");
// 출력 : 100cm
}
}
class 사람 {
팔 a왼팔;
사람() {
a왼팔 = new 팔(); // a왼팔 변수를 팔 객체로 연결
}
void 걷다() {
System.out.println("사람 걷는다.");
}
}
class 팔 {
int 길이;
팔() {
길이 = 100;
}
}
문제 5. this의 역할
💡 this
- 인스턴스 자신을 가리키는 키워드
- 클래스 메소드의 매개변수와 멤버변수의 식별자(변수이름)이 겹치는 경우가 발생할 때 유용
문제 6. 사람을 만들 때 왼팔과 손과 엄지손가락이 한번에 만들어질 수 있도록
// 생성자 갯수 제한 X
public class c14p6 {
public static void main(String[] args) {
int 엄지손가락_길이 = new 사람().a왼팔.a손.a엄지손가락.길이;
System.out.println(엄지손가락_길이 + "cm");
// 출력 : 5cm
}
}
class 사람 {
팔 a왼팔;
사람() {
a왼팔 = new 팔();
}
}
class 팔 {
손 a손;
팔() {
a손 = new 손();
}
}
class 손 {
손가락 a엄지손가락;
손() {
a엄지손가락 = new 손가락();
}
}
class 손가락 {
int 길이;
손가락() {
길이 = 5;
}
}
문제 7. 문제 6의 생성자 갯수 3개로 제한
public class c14p7 {
public static void main(String[] args) {
int 엄지손가락_길이 = new 사람().a왼팔.a손.a엄지손가락.길이;
System.out.println(엄지손가락_길이 + "cm");
// 출력 : 5cm
}
}
class 사람 {
팔 a왼팔;
사람() {
a왼팔 = new 팔();
}
}
class 팔 {
손 a손;
팔() {
a손 = new 손();
}
}
class 손 {
손가락 a엄지손가락;
손() {
a엄지손가락 = new 손가락();
a엄지손가락.길이 = 5;
}
}
class 손가락 {
int 길이;
}
문제 8. 문제 6의 생성자 갯수 1개로 제한
public class c14p8 {
public static void main(String[] args) {
int 엄지손가락_길이 = new 사람5().a왼팔.a손.a엄지손가락.길이;
System.out.println(엄지손가락_길이 + "cm");
// 출력 : 5cm
}
}
class 사람5 {
팔5 a왼팔;
사람5() { // 생성자
a왼팔 = new 팔5();
a왼팔.a손 = new 손5();
a왼팔.a손.a엄지손가락 = new 손가락5();
a왼팔.a손.a엄지손가락.길이 = 5;
}
}
class 팔5 {
손5 a손;
}
class 손5 {
손가락5 a엄지손가락;
}
class 손가락5 {
int 길이;
}
메소드 오버로딩
💡 ● 같은 이름의 메소드를 중복하여 정의하는 것
● 매개변수의 개수와 타입을 변경하여 설정
public class MethodOverloading {
public static void main(String[] args) {
Test t = new Test();
t.something();
t.something(10);
t.something(10,10);
t.something(10,10.1);
}
void something() {
System.out.println("something!");
}
void something(int i) {
System.out.println(i);
}
void something(int i, int i2) {
System.out.println(i+i2);
}
void something(int i, double d) {
System.out.println(i+d);
}
}
TDD 구현
후기 : 재밌다 시간가는줄 모르겠다 너무 재미있어서 막 더 해보고싶다!!!!
'멋쟁이 사자처럼 BE School' 카테고리의 다른 글
[멋쟁이사자처럼 Back-End School 1기] Day 16. 구조체, supe ,SSG (0) | 2022.07.07 |
---|---|
[멋쟁이사자처럼 Back-End School 1기] Day 15. 전처리기, 응집도와 결합도, Composition, 배열과 리스트 (0) | 2022.07.06 |
[멋쟁이사자처럼 Back-End School 1기] Day 13. 문자열, GC, JAVA, TDD (0) | 2022.07.04 |
[멋쟁이사자처럼 Back-End School 1기] Day 12. C언어, Java (0) | 2022.06.30 |
[멋쟁이사자처럼 Back-End School 1기] Day 11. C언어, Java (0) | 2022.06.29 |