9월 20일

Yullgiii·2023년 9월 20일
0
post-thumbnail

ADsP

모의고사 늘 모의고사 지겹지만 그게 답이니까 모의고사...

내일 배움 캠프

오늘은 슬랙으로 날라오는 코딩테스트(알고리즘)을 풀고 나머지로 자바와 CSS를 할것이다

Algorithm

문제 1. 배열 두배 만들기

문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

제한사항
-10,000 ≤ numbers의 원소 ≤ 10,000
1 ≤ numbers의 길이 ≤ 1,000

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int [numbers.length];
        for(int i = 0; i < numbers.length; i++){
            answer[i] = numbers[i] * 2;
        }
        return answer;
    }
}

문제 2.배열 뒤집기

문제 설명
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ num_list의 길이 ≤ 1,000
0 ≤ num_list의 원소 ≤ 1,000

public class Solution {
    public int[] solution(int[] num_list) {
        // 입력 배열의 길이를 구함
        int length = num_list.length;
        
        // 결과를 저장할 배열을 생성 (입력 배열과 동일한 길이)
        int[] reversedArray = new int[length];
        
        // 배열을 거꾸로 뒤집어서 결과 배열에 저장
        for (int i = 0; i < length; i++) {
            reversedArray[i] = num_list[length - 1 - i];
        }
        
        // 결과 배열을 반환
        return reversedArray;
    }
}

이렇게 두문제를 풀어보았다.

회고

확실히 실전에서 언어를 써보는것이 몹시 중요함을 느낀다.

CSS

익숙해지는것이 목표!

B 버튼 만들기!!!

<script>
.b-button {
    background-color: white;
    border-color: rgb(212, 6, 64);
    border-style: solid;
    border-width: 1px;
    color: rgb(6,95,212);
    border-radius: 2px;
    cursor: pointer;
    padding-top: 9px;
    padding-bottom: 9px;
    padding-left: 16px;
    padding-right: 16px;
    transition: background-color 3s, color 0.15s;
}

.b-button:hover {
    background-color: rgb(6,95,212);
    color: white;
}

.b-button:active {
    opacity: 0.7;
}
</script>

C버튼 만들기

<script>
.c-button {
    background-color: rgb(25,69, 98);
    color: white;
    border: none;
    height: 36px;
    width: 74px;
    border-radius: 8px;
    font-weight: bold;
    font-size: 15px;
    cursor: pointer;
    margin-left: 8px;
    transition: all 1s ease-out;
}

.c-button:hover {
    box-shadow: 5px 5px 10px rgba(0,0,0, 0.5);
}
</script>

크롬 개발자 도구

Margin, Padding, Border(CSS Box Model)

Text 스타일링하기

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>

    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
    
    <link rel="stylesheet" href="styles.css">
</head>
<style>
.a-text {
    font-family: 'Noto Sans KR', sans-serif;
    font-size: 40px;
    font-weight: 600;

    font-style: italic;
    text-align: center;
    line-height: 36px;

    text-decoration: underline;
    text-decoration: none;
}

.b-span-text {
    text-decoration: underline;
}
</style>
<body>
        <p class="a-text">
            텍스트1
        </p>

        <p class="b-text">
            텍스트<span class="b-span-text">span</span>텍스트
        </p>
</body>
</html>

Image, Input 요소


Transform


Scale : 함수!!!!!!!!!!!!!

회고

뭔가 처음 개념부터 잡고 가는 느낌이라.....허허 좋구먼
신기한것도 많고 내가 저번에 했던 강의는 진짜 따라하기용으로 기본을 조금은 빠르게 넘어가는 강의 같았다면
이번은 정말 하나하나 세세하게 하는 느낌이다.

Java

얄코님의 강의를 어제에 이어서 복습할것이다!!!!

문자 자료형

char - 문자 character 자료형

  • 2바이트 사용 - short와 동일
  • 유니코드상 문자 - 🍿 https://youtu.be/1jo6q4dihoU
  • 단따옴표를 사용하여 1개의 문자 표현 - 빈 문자 불가
		// 문자 리터럴과 숫자, 유니코드로 표현 가능
        char ch10 = 'A';
        char ch11 = 65;
        char ch12 = '\u0041';

문자별 유니코드 정보: 🔗 List of Unicode characters - Wikipedia

기억할것은 문자별로 아스키코드등의 정수 변환이 가능하고 작은 따옴표''를 사용해야한다!!!
그것이 char 이다!!!

		//  같은 문자열인지 여부 반환
        boolean bool1 = 'A' == 'A';
        boolean bool2 = 'A' == '가';

        //  숫자와 비교할 시 해당 정수값 기준으로
        boolean bool3 = 'A' == 65;
        boolean bool4 = 'A' > 64.0;
        boolean bool5 = 'A' > 66f;

        //  사전순 상 먼저 오는 쪽이 작음
        boolean bool6 = 'A' < 'B';
        boolean bool7 = '가' > '나';

위와 같은식으로 정수대 글자로 비교가 가능하다!!!!!!!!!

불리언 자료형과 관련 연산자

boolean 자료형

  • 참/거짓 둘 중 한 값을 가짐
  • 1바이트 (8비트) 공간 차지
    • 하드웨어 구조와의 호환성 - CPU가 수월히 다룰 수 있는 최소 단위
  • 리터럴보다는 반환값으로 많이 사용됨
    워메 중요한걸
  • IntelliJ에서 비교 연산자에 커서를 가져다 대면 단위별로 true , false 가 표시됨

논리 연산자

a && bANDa와 b가 모두 true일때만 true 반환
a || bORa와 b 중 하나만 true면 true 반환

단축평가 short circuit

  • && : 앞의 것이 false면 뒤의 것을 평가할 필요 없음
  • || : 앞의 것이 true면 뒤의 것을 평가할 필요 없음
  • 평가는 곧 실행 - 이 점을 이용한 간결한 코드
  • 💡 연산 부하가 적은 코드를 앞에 - 리소스 절약

삼항 연산자

  • a ? b : c
    • a : 불리언 값
    • b : a가 true 일 때 반환될 값
    • c : a가 false 일 때 반환할 값

문자열 자료형과 기초 사용

String : 문자열 자료형

  • 0~다수의 문자들로 구성
  • 쌍따옴표로 둘러쌈
  • 이제까지 배운 자료형들과 달리 참조 자료형
    • 그러나 특별히 원시값과 유사하게 사용될 수 있음
    • == : 같은 종이인가?
  • equals : 같은 글이 적혀있는가?

5. 문자열 자료형과 기초 사용법

String : 문자열 자료형

  • 0~다수의 문자들로 구성
  • 쌍따옴표로 둘러쌈
  • 이제까지 배운 자료형들과 달리 참조 자료형
    • 그러나 특별히 원시값과 유사하게 사용될 수 있음

☕ Ex01.java

				//  리터럴 방식
        String str1 = "Hello World!";
        String str2 = "안녕하세요 😆 반갑습니다~ 🖐️🖐️🖐️";
        
        // 빈 문자열 가능
        String str3 = "";

        //  인스턴스 생성 방식
        String str4 = new String("나중에 자세히 배웁니다.");
  • 클래스의 인스턴스
    • 일단, 단순 값 뿐 아니라 특정 기능들을 가진 무언가로 이해할 것
    • 객체지향 섹션에서 상세히 다룸

☕ Ex02.java

				String hl1 = "Hello";
        String hl2 = "Hello";
        String wld = "World";

        //  리터럴끼리는 == 을 사용하여 비교 가능
        boolean bool1 = hl1 == hl2;
        boolean bool2 = hl1 == wld;

        String hl3 = new String("Hello");
        String hl4 = new String("Hello");
        String hl5 = hl4;

        //  💡 인스턴스와 비교하려면 .equals 메소드를 사용해야 함
        //   특별한 경우가 아니면 문자열은 .equals로 비교할 것
        boolean bool3 = hl3 == hl4;

        boolean bool4 = hl1.equals(hl2);
        boolean bool5 = hl1.equals(hl3);
        boolean bool6 = hl3.equals(hl4);
        boolean bool7 = wld.equals(hl2);

        //  같은 곳을 참조하는 인스턴스들
        boolean bool8 = hl4 == hl5;
  • == : 같은 종이인가?
  • equals : 같은 글이 적혀있는가?
  • 리터럴로 생성시: String constant pool 이란 곳에 중복 없이 저장됨
    • 같은 문자열이 적힌 리터럴 변수들은 같은 것을 가리킴
  • 객체 인스턴트로 생성시 : 매 번 새로 생성되어 각각 자리를 차지
이스케이프 표현대체
\"큰따옴표
\’작은따옴표
\n줄바꿈
\t
\백슬래시 하나

문자열 메소드들(두고두고 쓰일듯해서 잘 알기위해 좀 자세히 적음)

문자열은 불변 immutable

  • 문자열 스스로를 변경하는 메소드는 없음 - ”문자열 고쳐 쓰는 거 아니다”
    • 새 문자열 또는 다른 값을 반환
    • ⚠️ 문자열 변수에 다른 값을 넣을 수 없다는 뜻이 아님

⭐️ 반환값과 인자의 자료형 등을 살펴볼 것

문자열 길이 반환

		int int1 = "".length();
        int int2 = "헬로".length();
        int int3 = "Hello".length();
        int int4 = "김수한무 거북이와 두루미".length();

빈 문자열 여부

		String str1 = "";
        String str2 = " \t\n";
        
        int int1 = str1.length();
        int int2 = str2.length();

        //  💡isEmpty : 문자열의 길이가 0인지 여부
        boolean bool1 = str1.isEmpty();
        boolean bool2 = str2.isEmpty();

        //  💡isBlank : 공백(white space)을 제외한 문자열의 길이가 0인지 여부
        boolean bool3 = str1.isBlank();
        boolean bool4 = str2.isBlank();

트리밍

		String str3 = "\t 에 네 르 기 파!! \n";

        //  💡 trim : 앞뒤의 공백(white space) 제거
        String str4 = str3.trim();
		//  변수 그 자체에 적용하기
        //  - 문자열은 불변 : 변수가 가리키는 종이를 바꾸는 것
        str3 = str3.trim();

문자 반환

		String str1 = "아야 슬슬 오함마 준비해야 쓰것다";

        //  💡 charAt : ~번째 문자 반환
        char ch1 = str1.charAt(0);
        char ch2 = str1.charAt(4);

        //  ⭐️ 마지막 문자 얻기
        char ch3 = str1.charAt(str1.length() - 1);

문자(열)의 위치 반환

		String str2 = "얄리 얄리 얄라셩 얄라리 얄라";

        //  💡 indexOf/lastIndexOf : 일치하는 첫/마지막 문자열의 위치
				//  앞에서부터 카운트해서 int로 반환

        //  두 번째 인자 : ~번째 이후/이전부터 셈
        int int1 = str2.indexOf('얄');
        int int2 = str2.indexOf('얄', 4);

        int  int3 = str2.indexOf("얄라");
        int  int4 = str2.lastIndexOf("얄라");
        int  int5 = str2.lastIndexOf("얄라", 12);

				//  💡 포함되지 않은 문자는 -1 반환
        int int6 = str2.indexOf('욜');

값 동일 여부 확인

		//  💡 equals : 대소문자 구분하여 비교
        String str_a1 = "Hello World";
        String str_a2 = new String("Hello World");
        String str_a3 = "HELLO WORLD";

		boolean bool_a0 = str_a1 == str_a2;  // ⚠️ 문자열은 이렇게 비교하지 말 것!

        boolean bool_a1 = str_a1.equals(str_a2);
        boolean bool_a2 = str_a1.equals(str_a3);

        //  💡 equalsIgnoreCase : 대소문자 구분하지 않고 비교
        boolean bool_a3 = str_a1.equalsIgnoreCase(str_a3);
        boolean bool_a4 = str_a2.equalsIgnoreCase(str_a3);

포함 여부 확인

		String str_b1 = "옛날에 호랑이가 한 마리 살았어요.";

        //  💡 contains : 포함 여부
        boolean bool_b1 = str_b1.contains("호랑이");
        boolean bool_b2 = str_b1.contains("나무꾼");

        //  💡 startsWith : (주어진 위치에서) 해당 문자열로 시작 여부
        boolean bool_b3 = str_b1.startsWith("옛날에");
        boolean bool_b4 = str_b1.startsWith("호랑이");
        boolean bool_b5 = str_b1.startsWith("호랑이", 4);

        //  💡 startsWith : 해당 문자열로 끝남 여부
        boolean bool_b6 = str_b1.endsWith("살았어요.");
        boolean bool_b7 = str_b1.endsWith("호랑이");

정규표현식 일치 여부 확인

		String emailRegex = "^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$";

        String str_c1 = "yalco@yalco.kr";
        String str_c2 = "yalco.yalco.kr";
        String str_c3 = "yalco@yalco@kr";

        boolean bool_c1 = str_c1.matches(emailRegex);
        boolean bool_c2 = str_c2.matches(emailRegex);
        boolean bool_c3 = str_c3.matches(emailRegex);

문자열 비교

		String str_a1 = "ABC";
        String str_a2 = "ABCDE";
        String str_a3 = "ABCDEFG";

        //  💡 compareTo : 사전순 비교에 따라 양수 또는 음수 반환

        //  같은 문자열이면 0 반환
        int int_a1 = str_a1.compareTo(str_a1);

        //  시작하는 부분이 같을 때는 글자 길이의 차이 반환
        int int_a2 = str_a1.compareTo(str_a2);
        int int_a3 = str_a1.compareTo(str_a3);
        int int_a4 = str_a2.compareTo(str_a3);
        int int_a5 = str_a3.compareTo(str_a1);

        String str_a4 = "HIJKLMN";

        //  시작하는 부분이 다를 때는 첫 글자의 정수값 차이 반환
        int int_a6 = str_a1.compareTo(str_a4);
        int int_a7 = str_a4.compareTo(str_a3);
		String str_b1 = "abc";
        String str_b2 = "DEF";

        int int_b1 = str_b1.compareTo(str_b2);

        //  💡 compareToIgnoreCase : 대소문자 구분 없이 비교
        int int_b2 = str_b1.compareToIgnoreCase(str_b2);
  • 정렬 등에 사용

대소문자 변환

		String str_a1 = "Hello, World!";

        // 💡 toUpperCase / toLowerCase : 모두 대문자/소문자로 변환
        String str_a2 = str_a1.toUpperCase();
        String str_a3 = str_a1.toLowerCase();
				String str_b1 = "Hi! How are you? I'm fine. Thank you!";
        String str_b2 = "how";

        boolean bool_b1 = str_b1.contains(str_b2);

        //  ⭐️ 영문 텍스트에서 대소문자 무관 특정 텍스트 포함 여부 확인시
        boolean bool_b2 = str_b1
                .toUpperCase()
                .contains(str_b2.toUpperCase());

        boolean bool_b3 = str_b1
                .toLowerCase()
                .contains(str_b2.toLowerCase());

이어붙이기

☕ Ex07.java

		//  💡 concat : 문자열을 뒤로 이어붙임
        String str_a1 = "슉-";
        String str_a2 = "슈슉-";
        String str_a3 = "슈슈슉-";

        String str_a4 = str_a1 + str_a2 + str_a3;

        String str_a5 = str_a1.concat(str_a2);

        //  ⭐️ 메서드 체이닝
        String str_a6 = str_a1
                .concat(str_a2)
                .concat(str_a3)
                .concat(str_a4)
                .concat(str_a5);
		//  ⭐️ + 연산자와의 차이

        String str_b1 = "ABC";

        //  1. concat에는 문자열만 이어붙일 수 있음
        String str_b2 = str_b1 + true + 1 + 2.34 + '가';
        String str_b3 = str_b1
                //  .concat(true)
                //  .concat(1)
                //  .concat(2.34)
                //  .concat('가')
                ;

        //  2. concat은 필요시에만 새 인스턴스 생성 (큰 의미 없음)
        String str_b4 = str_b1 + "";
        String str_b5 = str_b1.concat("");

        int str_b1Hash = System.identityHashCode(str_b1);
        int str_b4Hash = System.identityHashCode(str_b4);
        int str_b5Hash = System.identityHashCode(str_b5);
		//  3. null이 포함될 경우

        String str_c1 = null;

        //  + 연산자는 null과 이어붙이기 가능
        String str_c3 = str_c1 + null + "ABC";

        //  ⚠️ concat은 NullPointerException 발생
        //String str_c4 = str_c1.concat("ABC");
        //String str_c5 = "ABC".concat(str_c1);
		//  4. ⭐️ 다중 연산시 생성되는 문자열 인스턴스의 수가 다름

        String str_d1 = "a" + "b" + "c" + "d";

        // + 연산은 내부적으로 아래와 같이 최적화됨 (이후 배움)
        String str_d2 = new StringBuilder("a")
                .append("b")
                .append("c")
                .append("d")
                .toString(); // "abcd"가 생성됨
        // "a", "b", "c", "d", "abcd"가 생성되어 메모리 차지

        //  concat은 매 번 문자열을 반환하므로
        String str_d3 = "a"
                .concat("b") // "ab"가 생성됨
                .concat("c") // "abc"가 생성됨
                .concat("d"); // "abcd"가 생성됨
        // "a", "b", "c", "d", "ab", "abc", "abcd"가 생성되어 메모리 차지
  • + 연산 : 다중 연산시 메모리 절약
    • ⚠️ 반복 연산 (이후 배울 for 루프 등) 에는 무의미
    • 반복 연산시에는 명시적으로 StringBuilder... append 사용
  • 성능이 중요하다면 이후 배울 StringBuilder, StringBuffer 등 사용
    • 그렇지 않을 시 상황에 따라 메서드 체이닝 등의 편의를 위해 concat 사용

반복하기

		String str_a1 = "덜컹";

        // 💡 repeat : 문자열을 주어진 정수만큼 반복
        String str_a2 = str_a1.repeat(2);
        String str_a3 = str_a1
                .concat(" ")
                .repeat(3)
                .trim();

잘라오기

		String str_b1 = "대한민국 다 job 구하라 그래";

        //  💡 substring : ~번째 문자부터 (~번째 문자까지) 잘라서 반환
        String str_b2 = str_b1.substring(7);
        String str_b3 = str_b1.substring(7, 10);
        String str_b4 = str_b1.substring(11, 14);

        String piece1 = "다 ";
        String piece2 = "구하라";
        String str_b5 = str_b1.substring(
                str_b1.indexOf(piece1),
                str_b1.indexOf(piece2) + piece2.length()
        );

치환

		//  💡 replace : 주어진 앞의 문자(열)을 뒤의 문자(열)로 치환
        String str_c1 = "점심에 보쌈집에 가서 수육을 먹었다.";
        String str_c2 = str_c1.replace("보쌈", "중국");

        //  여럿 포함시 모두 치환
        String str_c3 = "밥 좀 먹자, 응? 야, 밥 좀 먹자고 밥 밥 밥";
        String str_c4 = str_c3.replace('밥', '빵');

        // ⭐️ 원본은 바뀌지 않는 점 확인
		//  메서드 체이닝
        String str_d1 = "하여튼 호의가 반복되면 권리인 줄 알아";
        String str_d2 = str_d1
                .replace("하여튼", "아무튼")
                .replace("호의", "호이".repeat(2))
                .replace("권리", "아기공룡 둘리");
		String str_e1 = "02=123.4567_8900";

        //  💡 replaceAll / replaceFirst : ⭐️ 정규표현식 사용 가능
        //  전부 치환 / 첫 번째 일치부분만 치환
        String str_e2 = str_e1
                .replaceAll("[=._]", "-")
                .replaceFirst("[-@#]", ")");

배열 반환

		String str1 = "가나다라마";
        String str2 = "010-1234-5678";
        String str3 = "하나 둘 셋 넷 다섯";

        //  💡 toCharArray : 문자열을 분할하여 문자열의 배열로 반환
        char[] chAry1 = str1.toCharArray();
        char[] chAry2 = str3
                .replace(" ", "")
                .toCharArray();

        //  💡 split : 주어진 기준으로 (~개까지) 분할하여 문자열 배열로 반환
        String[] strAry1 = str1.split("");
        String[] strAry2 = str2.split("-");
        String[] strAry3 = str3.split(" ");
        String[] strAry4 = str3.split(" ", 3);

회고

복습은 위대하다 복습을 하는과정중에서 기억이 안나 가물가물하던것들이 머리에 쇽쇽 박혀나가니 훨씬더 유익한 시간이라고 느껴진다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글