으어ㅓ어 신난다

 

오늘은 객체지향이 뭔지 배웠다. 

 

객체지향 프로그래밍이란 '정보와 동작들을 객체 단위로 묶고, 이런 객체들을 연결시키면서 정리하는 프로그래밍 방식' 이라고 강의에서 정의하고 있다. 

 

c++을 처음 배웠던 2학년 객체지향프로그래밍 강의의 성적관리 프로그램으로 생각해보자면...

 

아 기억 안나는데 심지어 과제 파일까지 노트북이랑 같이 날아갔다. 대충 기억해보자면

성적입력, 학생정보 입력, 학생목록 및 성적 출력 등등이 있었던 것 같다. 

 

여기서 학생과 성적으로 클래스를 나눌 수 있을 것이다. 학생 클래스에는 학생의 이름, 학과, 학번 같은 정보가 들어가고 성적 클래스에는 강의 이름, 성적, 평균 등의 정보가 들어가지 않을까.

 

지금 듣는 강의에서는 은행계좌 관리 프로그램으로 예시를 들고 있다. 

강의를 한번 봤고 다시 보면서 따라해보고 싶었는데, 계속 일이 생겨서 오늘 하기는 힘들 것 같다. 내일 해야지....

'210525~220812' 카테고리의 다른 글

#11 접근제어자 210604  (0) 2021.06.05
#10 객체 실습 끝 210603  (0) 2021.06.03
#8 포기 210601  (0) 2021.06.02
#7 염기서열과 생물의 저주 210531  (0) 2021.06.01
#6 자바 배열 210530  (0) 2021.05.30

무엇을 포기했냐면 어제 봤던 배열 문제를 답 안보고 푸는걸 포기했다. 진짜 답지를 본건 아니고 다른 사람들이 어떻게 풀었는지 찾아봤다. 일단 이해해보고 나중에 다시 풀어보도록 하겟다. 

이렇게 '나중에 해야지 희희' 해놓고 말면 까먹고 안하니까 아예 다음주 월요일에 todo 어플로 알림설정을 해놨다. 그때 풀것이다. 

 

간단하게 설명하자면 4 크기의 새로운 char 배열을 만들어서 charArray 크기만큼 돌리는 반복문에서 문자 4개를 받아와서 찾는 문자열이 있으면 해당 갯수를 증가시킨다... 인데

 

이렇게 써놓으면 나중에 봐도 모르겠다. 일단 당장 이해했으니까 된거 아닐까?

 

다음주에 알아서 잘 풀어보도록 하자 ^^7

 

 

그리고 다중 배열에 대해 배웠다. 배울 때마다 생각하는 거지만 다중 배열은 정말... 알고 있음에도 다시 배울때마다 멈칫하고 이게 뭔소린가 하고 고민하게 된다. 결국 이해 되니까 된거지만... 복잡해보이는 코드도 찬찬히 보면 이해할 수 있다는걸 항상 명심하도록 하겠다.

 

for (int i = 0; i < multiArray.length; i++) {
    for (int j = 0; j < multiArray[i].length; j++) {
        multiArray[i][j] = (i * 4 + 1) + j;
    }
}

위 코드는 다중 배열에 1부터 12까지 입력하는 중첩 반복문

'210525~220812' 카테고리의 다른 글

#10 객체 실습 끝 210603  (0) 2021.06.03
#9 객체지향 210602  (0) 2021.06.03
#7 염기서열과 생물의 저주 210531  (0) 2021.06.01
#6 자바 배열 210530  (0) 2021.05.30
#5 자바 반복문 210529  (0) 2021.05.29

알바하다 자빠졌다!

 

부엌과 홀을 왔다갔다 하다보면 부엌에 흘린 물때문에 미끄러워서 조심해야 되는데, 오늘은 배달, 홀 모두 바빠서 조심 못하고 좀 세게(?) 걸었더니 오른쪽 발을 디딜때 미끄러진 것 같다. 비유하자면... 그 인어공주 앉는 자세마냥(......)

오른다리가 밑쪽으로 가고 오른쪽 골반을 땅에 박은 것 같다. 왜 확신하지 못하냐면 정신이 없었으니까...!

 

손님 한 두테이블 있었고.. 자빠진것 자체로 크나큰 어그로였지만 그 와중에 들고있던 그릇 떨어져서 땡땡그랑랑랑땡그랑하면 더 쪽팔리니까 아래로 주저 앉는 와중에 떨어지기 전에 붙잡았다. 사실 좀 그릇 떨어지는게 좀 슬로우모션으로 보였다. 주저 앉자 마자 자연스럽게(?) 일어나서 마저 할 일 했다. 자빠진걸 쪽팔려할 틈도 없이 바빴다는 소리다. 

 

아무튼 덕분에 양쪽 발목(+ 특히 왼발) 상태가 메롱해졌고.... 허벅지 근육은 놀란것 같고..... ㅇㅖ....

 

정형외과 갈 정도는 아니겠지? 

뭐 발목 나갔다고 코딩못하는것도 아니고(긁적

코드잇은 다 좋은데 개인적인 불편한? 점은... 예제마다 코딩창이 있어서 굳이 프로그램을 따로 실행할 필요가 없다는거...? 기껏 받아놓은 intelliJ 써먹지를 않아서 나중에 못 쓸까 걱정이다. 

 

아 공부하기 시렁

 

배열 실습 문제가 주어진 문자열에서 특정 단어가 몇번 나오는지 찾는 건데 음.... 

 

모르겠다!!

 

사실 어제 놀다와서 공부 하기 싫은거...

 

아무튼 문제에서 힌트로 문자열을 char[] 배열로 바꾸는 toCharArray() 메소드를 줬는데, 설마 문자열을 char[] 배열로 바꿔서 일일이 확인하는건 아닐거아녀...... 어떻게 해야 효율적일까으ㅏ아ㅏ아

 

아니 주어진 문자열이 무슨 염기서열이야 염기서열 생물 놓은게 언젠데ㅔㅔㅔㅔ

하...

주어진 염기서열에서 TAGG, CCAG, AGCC가 몇번 나오는지 세라는데,,,,

 

일단 char[] 배열로 바꾸고인덱스가 n 이라면 n, n+1, n+2, n+3 까지가 저 위 세개중 하나랑 같아야 하는건가

 

아니 char[] 배열로 바꿨다 치자. 반대로 문자열로 바꾸는 것도 힌트로 준걸 보면 이것도 써먹어야 된다는 걸텐데 아오ㅗㅗㅗㅗㅗㅗ

 

찾아야 하는 단어 3개의 공통점은 GG, CC 처럼 두개가 연속되는 글자가 있다는 건데, 이걸 이용할 수 있을까 

 

 

아 그러고보니 염기서열에 A, T, G, C 밖에 없었지? 이제 생각났다. A T가 짝대기고 G C가 뚱그런걸로 외우라고 했던것 같은데.... 아... 이게 기억 나는걸 보니 역시 나는 이과였던건가..... 왜 아직도 이과지...?

 

그래서 저 염기서열에 나오는건 A, T, G, C 밖에 없는거고... charArray로 바꿔서 0부터 charArray 크기 만큼 반복문 돌리고 첫 글자가 G면 넘기고, 다른 세개면 두번째 오는걸 비교해서 어떻게저쩧게이렇게 으어어ㅓ어ㅓ 하면 될거같다. 역시 말로 쓰는것 보다는 직접 짜보고 깨지는게 빠르긴 한데.

일단 정리를 하고 코드를 짜야한다고들 하는데 나는 이해를 덜하고 코드를 이상하게 짜면서 이해해가는 것 같다. 사실 많이 고쳐진거긴 하다. 어.. 코드만 잘 짜지면 되겠지 뭐...

 

 

아무래도 의식의 흐름대로 쓰는거다보니 정신 없다. 지금까지 확실한 내용을 정리해보자면

1. 배열을 이루는 알파벳은 A, T, G, C

2. 찾아야 하는 문자열은 TAGG, CCAG, AGCC

3. 문자열을 char[] 배열로 바꾸는 toCharArray() <-> char[] 배열을 문자열로 바꾸는 new String(char[]배열) 사용

4. G로 시작하는 문자열은 없으므로 반복문을 돌릴때 G를 가리키는 인덱스는 패쓰

정도가 생각 나는데... 뭐 더 없나

 

오늘은 피곤하니까 저것만 염두해두고 내일 하는걸로(도망

'210525~220812' 카테고리의 다른 글

#9 객체지향 210602  (0) 2021.06.03
#8 포기 210601  (0) 2021.06.02
#6 자바 배열 210530  (0) 2021.05.30
#5 자바 반복문 210529  (0) 2021.05.29
#4 자바 if else if else if 210528  (0) 2021.05.28

자바 배열 선언 방법

int[] intArray; // 초기화 안하고 선언만

int[] intArray = new int [5]; // 선언 및 빈 배열 생성

int[] intArray = {1, 2, 3, 4, 5}; // 리터럴로 생성, 변수를 정의 할 때만 사용 가능

intArray.length로 크기 받아올 수 있다. 

 

 

Aliasing

int[] arr1 = {1, 2, 3, 4, 5};

int[] arr2 = arr1; 

arr[0] = 100;

일 때 arr2[0]을 출력하면 100이 나온다. arr1과 arr2가 똑같은 주소를 가리키기 때문에 arr2를 arr1의 'Alias(가명)'이라 할 수 있다고 한다...

값을 복사하기 위해서는 clone 메소드를 사용 

ex) int[] arr2 = arr1.clone();

 

 

for-each

에... 파이썬에도 있다는데 사실 모르고 썼다. 그냥 for문인줄 알았는데...

파이썬에서는 for i in intArray 같은 형식으로 쓰는게 for-each인가? 그런가보다

자바에서는 

for(int i : intArray) {
	System.out.println(i);
}    

같은 방법을 사용한다. i = 0 부터 시작

 

 

예제풀이

c언어를 첫 프로그래밍 언어로 배운 입장에서 문자열 배열(String[])이라는게 좀 웃기다. 애초에 문자열이 문자(char)형의 배열이 아니었던가...? 아님 말고 껄껄

그래서 c로 문자열 처리하는게 제일 빡치는 거겠지......

 

암튼 예제를 풀고 풀이를 볼 때마다 내가 얼마나 비효율적으로 코드를 짜는지 알게 되는것 같아서 살짝 우울하다. 뭐 많이 하다보면 잘 하게 되겠지!! ......되겠지?

 

이번 예제는 음

1. 크기 30 정수형 배열 intArray 선언

2. intArray에 1001...1030 입력

3. 크기 4 문자열형 배열 remainders 선언하여 Zero, One, Two, Three 입력

4. intArray%4를 인덱스로 하여 remainders 배열 출력(for-each 사용)

이다. 

 

2번까지는 나름 괜찮았다. 3번은 String[]으로 할걸 처음에 char[]로 해서 틀렸지만... 아 빨리 고쳤음 된거지

그런데 4번을 하면서 intArray 값을 어떻게 건드려야 할지 몰라서 위에서 배운 clone을 써서 intArray를 복제하고 이걸 일일이 반복문 돌려서 나머지 값 저장해서 이걸 인덱스로 remainders를 출력하게된 것이다....... 이 무슨 비효율의 극치람. 이정도로 일 돌아돌아 하는 것도 재능 아닐까? 전혀 기쁘지 않다. 

그래서 내가 풀이한 코드는 아래와 같다. 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성하세요.
        int[] intArray = new int [30];
        for(int i = 0; i < intArray.length; i++){
            intArray[i] = 1000 + i + 1;
        }
        String[] remainders = {"Zero", "One", "Two", "Three"};
        
        int[] remainArr = intArray.clone();
        for(int i = 0; i < remainArr.length; i++){
            remainArr[i] = remainArr[i] % 4;
        }
        for(int i : remainArr){
            System.out.println(remainders[i]);
        }
    }
}

풀이 영상을 보니 마지막 for-each문에서 intArray를 받아와 출력할 때 remainders[i % 4]를 써서 해결했더라. 왜 난 째깍째깍 이런 코드는 생각 못하는 걸까. 왜 굳이 쉽게 갈 길을 돌아서 가야하는가. 이런 나를 써줄 회사가 있을 것인가? 정녕 나의 미래는 중소기업 코딩노예인 것인가? 이런 한심한 실수를 반성하기 위해 하는 오답노트용 블로그다. 앞으로는 반성하고 똑바로 하자!

 

그래서 고친 코드는 아래와 같다. 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성하세요.
        int[] intArray = new int [30];
        for(int i = 0; i < intArray.length; i++){
            intArray[i] = 1000 + i + 1; //사실 얘도 굳이 이렇게 안하고 1001 + i 하면 되지만 이런 사소한 문제는 넘어가도록 하자
        }
        String[] remainders = {"Zero", "One", "Two", "Three"};
        
        for(int i : intArray){
            System.out.println(remainders[i % 4]);
        }
    }
}

이야 정말 간결하자너...... 반성하자 나 자신. 나머지 출력하는것 같다는건 알았으면서,,,, 왜,,,,

 

 

 

이 뒤에 예제 하나 더 있는데 하기 싫으므로 오늘은 요기까즤 

오늘은 이정도면 많이 했다고 생각한다!!! 아마!!!!

'210525~220812' 카테고리의 다른 글

#8 포기 210601  (0) 2021.06.02
#7 염기서열과 생물의 저주 210531  (0) 2021.06.01
#5 자바 반복문 210529  (0) 2021.05.29
#4 자바 if else if else if 210528  (0) 2021.05.28
#3 자바 리터럴 210527  (0) 2021.05.28

while문 예제 중에 해설과 다르게 푼 문제가 있어서 여기 적어놓으려 한다. 나중에 까먹을거같아서.

 

일단 문제는 '10000 미만의 정수 중에서 153의 배수 중 가장 큰 값을 찾아 출력하기'이다. 

10000을 대입한 변수 num과 153을 대입한 변수 key가 문제에 주어져있었다. 

 

내가 푼 방법은 변수 i를 선언해서 i*key가 num보다 작을 때까지 i를 1씩 더해주면서 i*key가 10000이 넘어가면 while문은 종료되고 --i*key를 출력하는 식이었는데, 풀이를 보니 나랑 반대로 되어있었다. 

public class Main {
    public static void main(String[] args) {
        int num = 10000;
        int key = 153;

        // 여기에 코드를 작성하세요.
        int i = 1;
        while(i * key < num){
            i++;
        }
        System.out.println(--i * key);
    }
}

 

 

풀이에 나온 방법은 나머지 연산을 써서 num%key가 0이 될 때까지 num을 1씩 빼주고, 0이 되면 while문을 빠져나와 num을 출력하는 방식이었다. 

public class Main {
    public static void main(String[] args) {
        int num = 10000;
        int key = 153;

        // 여기에 코드를 작성하세요.
        while(num % key > 0){
            num--;
        }
        System.out.println(num);
    }
}

 

해설 영상을 보다가 왜 조건식이 num%key!=0이 아닌지 잠깐 고민해봤는데, key의 배수인 가장 큰 num 값만 구하면 되니까 상관 없겠다 싶었다. 

 

 

왜 이런 간단한 문제를 적어놓냐면 이런 발상의 전환을 가져야 한다는 경각심을 갖기 위해..... 라고 할 수 있겠다.

문제 풀이에 있어서 여러가지 방향으로 접근할 수 있으면 좋은거 아닌가? 여러가지 방법 중에 최선의 것을 고를 수 있으니까.

아 암튼 내맘대로할거임

 

내가 너무 문제를 꼬아서 푸는건가 싶기도 하고...... 반성의시간

'210525~220812' 카테고리의 다른 글

#7 염기서열과 생물의 저주 210531  (0) 2021.06.01
#6 자바 배열 210530  (0) 2021.05.30
#4 자바 if else if else if 210528  (0) 2021.05.28
#3 자바 리터럴 210527  (0) 2021.05.28
#2 자바 변수(+자료형) 210526  (0) 2021.05.27

오늘은 조건문과 반복문을 배웠따. 조건문이야 맨날 했던거니까 넘어가고, 조건문 중에서도 switch문을 배우는데 잘 생각해보니까 전에 배웠던 파이썬에서는 switch문이 없었던게 생각나서 내가 똑바로 안한건가 해서 찾아봤더니 파이썬에는 switch문이 없다고 한다. 없어도 코딩할거 다 할 수 있으니까 없다는데...... 그럼 c c++ java는 왜 있는거지

 

까먹고 있었는데 이번에 다시 해보니 왜 파이썬에 추가 안됐는지 알거같기도...... 최대한 간결하게 코드 작성하려는 파이썬 입장에선 case를 죄다 나누는 거랑 break를 일일이 써줘야 하는게 불편하게 느껴질수 있다 싶었다. 

 

아 근데 예제가 또 성적 출력하는 거라 객프 성적관리프로그램이 생각나버렸다. aㅏ.... 신난다...

참... 그땐 진짜 머리 빠개지는 괴로움이었는데 이제와서 다시 하라면 할수 있을거같지만 하기 싫고......

 

if문의 조건식은 불린 결과값 / switch문의 조건식은 숫자, 문자열 등 결과값

=> 결과값에 따라 실행 코드 결정

여러개의 동등한 조건의 나열에는 switch문이 낫다.

 

나머지 구하는 예제 푸는데 / 말고 % 써서 한번 틀렸따....

'210525~220812' 카테고리의 다른 글

#6 자바 배열 210530  (0) 2021.05.30
#5 자바 반복문 210529  (0) 2021.05.29
#3 자바 리터럴 210527  (0) 2021.05.28
#2 자바 변수(+자료형) 210526  (0) 2021.05.27
#1 자바시작 210525  (0) 2021.05.26

오늘은 자바 연산자와 형(변환)에 대해 배웠다. 연산자야 파이썬 c 등등에서도 많이 배웠기 때문에 여기엔 생략하고, 가장 이해가 안됐던건 리터럴이다. 소스코드의 고정된 값을 대표하는 용어라는데...... 뭔소리여

 

구글링 해서 찾아봤다.

 

 

모르겠다!!

ㅋㅋㅋㅋㅋㅋㅋ

 

한 세번쯤 읽어보니까 이해가 되는거 같기도 하고...... 1학년때도 c 처음 배울때 이랬던거 같기도 하고......

대충 자료형이 어떤건지 확실하게 해주는건가? double인지 float인지... 음......

언젠간 이해할 수 있기를......

 

이 다음건 조건문인데 다 아는거 또 들으려니 하기 싫다. 언제는 하고 싶었나 싶긴 한데 그런건 딱히 신경 쓰지 않는걸로

파이썬에서 조건문 할때도 처음엔 elif 쓰면서 많이 틀렸다. else if가 손에 익어서...... 익숙해지면 이렇게 좋을 수가 없어요!! 여러분파이썬핫ㅔㅛ

 

크흠...... 아무튼 빨리 기초 끝내고 심화로 넘어가야 할텐데

'210525~220812' 카테고리의 다른 글

#5 자바 반복문 210529  (0) 2021.05.29
#4 자바 if else if else if 210528  (0) 2021.05.28
#2 자바 변수(+자료형) 210526  (0) 2021.05.27
#1 자바시작 210525  (0) 2021.05.26
#0 엎었다.  (0) 2021.05.25

+ Recent posts