728x90
반응형
SMALL

23.02.02

  • 25일 해야할 일
    • [x] 코딩테스트 시험!
    • [x] 자바 이론 공부
    • [x] 프로그래머스 문제 풀기!
    오늘 시험시험시험 떨립니당ㅇ아아아아ㅏㅇ ㅎㅎㅎㅎ문제를 열심히 풀었습니다!!분명 어제 풀었는데 헷…ㅎㅎ2번에서 너무 오래 걸렸습니다..ㅎㅎㅎㅎ 그래서 결국 3번문제를 지금 풀긴했습니다!흑흑 ㅠㅠ
  • 제가 블로그에 올리기 전에 노션에 따로 적어 놓는데 노션에서 자꾸 한글이 안써져요 ㅠㅠㅠ왜일까요 …?
  • 결국 문제를 풀고 3번 문제를 풀고 있는데, 시간이 부족하네여 ㅠㅠ
  • sc.nextInt(); 이 부분에서 에러가 났는데, 왜 나는지 모르겠어서 계속해서 다시 풀었습니다..ㅎㅎㅎ
  • 자바 환경에서 문제열을 확인할 떄, 문자열을 문자 배열로 만드는 것은 charAt() 메소드보다 메모리 효율성

솔리드를 다시 복습하고 있습니다!

Solid을 공부하고 싶다면 아래와 같은 단계를 고려할 수 있습니다:
  1. Solid 스펙 읽기: Solid의 기본 원칙과 목적을 이해하기 위해서는 공식 Solid 스펙을 읽어보시는 것이 좋습니다.
  2. 웹 개발 이해: Solid을 사용하려면 HTML, CSS, JavaScript 등 웹 개발에 대한 이해가 필요합니다.
  3. Linked Data와 시맨틱 웹 이해: Solid은 Linked Data 기반입니다. Linked Data와 시맨틱 웹의 기초를 이해하는 것이 중요합니다.
  4. Solid 프로그래밍 라이브러리 공부: Solid에서 사용할 수 있는 라이브러리는 Solid.js 자바스크립트 라이브러리와 RDF.js 라이브러리 등이 있습니다. 이 라이브러리를 익히면 Solid을 사용하는 법을 더 잘 이해할 수 있습니다.
  5. Solid 앱 살펴보기: 이미 만들어진 Solid 앱을 살펴보세요. 어떻게 만들어졌는지, 제공하는 기능이 무엇인지 알아보시면 Solid의 실제 애플리케이션

단일 책임 원칙(Single Responsibility Principle)은 프로그래밍에서 클래스나 모듈이 단 한 가지 책임만 가져야 한다는 것을 의미합니다. 즉, 클래스나 모듈은 변경 사유가 단 한 가지만 있어야 하며, 다른 부분에 대해서는 영향을 미치지 않아야 합니다.

예를 들어, 주문 처리 시스템이 있다고 가정해봅시다. 주문 정보를 저장하는 클래스와 주문을 전송하는 클래스가 있습니다. 이 두 클래스는 단일 책임 원칙에 따라 분리되어야 합니다. 즉, 주문 정보를 저장하는 클래스는 오직 주문 정보를 저장하는 역할만 해야 하고, 주문을 전송하는 클래스는 오직 주문을 전송하는 역할만 해야 합니다. 이렇게 각 클래스는 각기 다른 책임을 가지게 되어 개발자는 이를 수정하고 테스트하기 쉽게 됩니다

개방/폐쇄 원칙은 소프트웨어 개발에서 아키텍처와 설계의 개선을 위한 원칙 중 하나입니다. 이 원칙은 소프트웨어의 구성 요소가 확장에 열려 있지만 변경에는 폐쇄되어 있어야 한다는 것을 의미합니다.

예시로, 개방/폐쇄 원칙을 적용한 경우, 새로운 기능을 추가할 때는 기존의 코드를 수정하지 않고 새로운 클래스나 모듈을 추가하여 기능을 확장할 수 있습니다. 그러나, 기존의 구성 요소를 변경할 때는 그 구성 요소의 테스트 코드를 통과하는 것을 보장하며, 기존의 구성 요소를 변경하지 않도록 주의해야 합니다.

나머지는 다시 정리해보기!


항해99 알고리즘 코딩테스트

하. 물건을 구매해볼까?

르탄이가 1000원을 가지고 편의점에서 물건을 사려고 한다. 편의점에는 500원, 100원, 50원, 10원이 충분히 있고, 편의점 직원은 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 르탄이가 편의점에서 물건을 사고 1000원 지폐 한 장을 냈을 때, 받을 잔돈의 개수를 구하는 프로그램을 작성하여라. (단, 물건의 가격은 10원 이상 1000원 미만이며, 1원 단위는 고려하지 않는다.)

  • 아래 답안 포맷을 참고하여 답안을 작성해주시기 바랍니다.
    • Java 답안
public class Main {
    public int solution(int num) {
        int answer = 0;
        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        int num1 = 160;
        System.out.println(method.solution(num1));
    }
}
public static void main(String[] args) throws IOException {

        //그냥 풀었을 때
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   //BufferedReader 정수를 읽는데 사용
        int cost = Integer.parseInt(br.readLine());
        cost = 1000-cost;
        int num =0;
        while(cost>0){
            if(cost/500>0){
                num += cost/500;
                cost = cost%500;
            }
            else if(cost/100>0){
                num += cost/100;
                cost = cost%100;
            }
            else if(cost/50>0){
                num += cost/50;
                cost = cost%50;
            }
            else if(cost/10>0){
                num += cost/10;
                cost = cost%10;
            }
            else{
                num += cost/1;
            }
        }
        System.out.println(num);
그리디로 풀었을 경우!
어차피 계산할때부터 애초에 금액이 1000원의 남은 잔돈을 가지고 나머지 금액을 계속 빼가는 방식입니다.
즉, 500원을 최대한 빼주면 적어도 500원이 새로 생기는 경우는 없을 겁니다.
우리는 이런 추측을 바탕으로 100원이나 50원 10원 5원에도, 적용할 수 있습니다.
각 금액별로 딱 한번씩만 값을 나누면서 그 값을 num에 저장하면됩니다. 그러면 정답이 나오게 됩니다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int cost = Integer.parseInt(br.readLine());
        int[] coinArr = {500, 100, 50, 10};
        cost = 1000 - cost;
        int num = 0;

        for (int i = 0; i < 4; i++) {
            if (cost / coinArr[i] > 0) {
                num += cost / coinArr[i];
                cost = cost % coinArr[i];
            }
        }
        System.out.println(num);

 

중. 동그라미 엑스로 숫자를?

"OOXXOXXOOO"와 같은 OX문의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

(단, OX문의 결과는 0보다 크고 80보다 작은 문자열이 주어진다. 또한 문자열은 O와 X만으로 이루어져 있다.)

  • 아래 답안 포맷을 참고하여 답안을 작성해주시기 바랍니다.
    • Java 답안 포맷
public class Main {
    public int solution(String s) {
        int answer = 0;
        return answer;
    }

	  public static void main(String[] args) {
        Main method = new Main();
        String s = "OXOOOXXXOXOOXOOOOOXO";
        System.out.println(method.solution(s));
    }
}
public static void main(String[] args) {

            Scanner sc = new Scanner(System.in);

            String a = sc.nextLine();
            int n = a.charAt(0) - '0';                        //횟수 설정

            for (int i = 0; i < n; i++) {
                int count = 0;
                int sum = 0;
                String str = sc.nextLine();                  //문자열 받아옴
                String[] arr = str.split("");             //한글자 단위로 배열 저장
                for (int j = 0; j < arr.length; j++) {
                    if (arr[j].equals("O")) {               //점수 계산
                        count++;
                        sum += count;
                    } else {
                        count = 0;
                    }

                }
                System.out.println(sum);                    //점수 출력
            }
            sc.close();
        }
    }

 

상. 지뢰 탐지가 필요해!

windows에서 지원하는 지뢰 찾기 게임을 한번쯤은 해 보았을 것이다. 특히 르탄이는 지뢰찾기의 매니아로 알려져 있다. 지뢰 찾기 map은 N*N의 정사각형 모양으로 각 칸에는 숫자가 들어가 있거나 지뢰가 들어가 있다. 빈 칸에는 숫자 0이 들어있다고 생각하자.

map의 어떤 칸에 적혀 있는 숫자는, 그 칸과 인접해 있는 여덟 개의 칸 중에서 지뢰가 들어 있는 칸이 몇 개인지를 나타내 준다. 물론 인접한 칸이 map 내부에 있는 경우에 대해서만 생각하면 된다. 예제를 보면 더 잘 이해할 수 있을 것이다.

이번 문제는 조금 업그레이드 된 지뢰 찾기로, 한 칸에 한 개의 지뢰가 있는 것이 아니고, 한 칸에 여러 개(1 이상 9 이하)의 지뢰가 묻혀 있는 게임이다. 따라서 map의 어떤 칸에 적혀 있는 숫자는, 그 칸과 인접해 있는 여덟 개의 칸들에 들어 있는 지뢰의 총 개수가 된다.

이미 windows 지뢰찾기 같은 것을 마스터한 르탄이는, map에서 지뢰에 대한 정보만이 주어졌을 때, 르탄이는 map을 완성하고 싶다고 한다. N과 지뢰의 위치가 주어졌을 때, 르탄이를 도와서 지뢰 찾기 map을 완성하는 프로그램을 작성하시오.

(단, 1 ≤ N ≤ 1,000 이며, 배열의 각 요소에는 지뢰 찾기 map에 대한 정보가 주어지는데 '.' 또는 숫자로 이루어진 문자열이 들어온다. '.'는 지뢰가 없는 것이고 숫자는 지뢰가 있는 경우로 그 칸의 지뢰의 개수이다. 한 줄은 N개의 문자로 이루어져 있다.)

출력

N개의 줄에 걸쳐서 완성된 지뢰 찾기 map을 출력한다. 지뢰는 ''로 출력하며. 10 이상인 경우는 'M'(Many)으로 출력하면 된다. map은 숫자 또는 'M' 또는 ''로만 이루어져 있어야 한다.

  • 아래 답안 포맷을 참고하여 답안을 작성해주시기 바랍니다.
    • Java 답안 포맷
public class Main {
    public char[][] solution(int N, char[][] ary) {
        int[] x = {1, -1, 0, 0, 1, 1, -1, -1};
        int[] y = {0, 0, 1, -1, 1, -1, 1, -1};

        char[][] answer = new char[N][N];
        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        int N = 5;
        char[][] chars = {{'1', '.', '.', '.', '.'},
                {'.', '.', '3', '.', '.'},
                {'.', '.', '.', '.', '.'},
                {'.', '4', '.', '.', '.'},
                {'.', '.', '.', '9', '.'}};
        System.out.println(Arrays.deepToString(method.solution(N, chars)));
    }
}
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class P1996 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        char[][] map = new char[n][n], mine = new char[n][n];
        // 8방 탐색을 하기 위한 xy 배열에 넣기
        int[] dx = { -1, -1, -1, 0, 0, 1, 1, 1 }, dy = { -1, 0, 1, -1, 1, -1, 0, 1 };
        for (int i = 0; i < n; i++) {
            String tmp = br.readLine();
            for (int j = 0; j < n; j++)
                map[i][j] = tmp.charAt(j);
        }
        // 배열 입력받기
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int cnt = 0;
                if (map[i][j] != '.') {
                    mine[i][j] = '*';
                    continue;
                }
                else
                    for (int k = 0; k < 8; k++) {
                        if (i + dx[k] < 0 || i + dx[k] >= n || j + dy[k] < 0 || j + dy[k] >= n)
                            continue;
                        if (map[i + dx[k]][j + dy[k]] > '0')
                            cnt += map[i + dx[k]][j + dy[k]] - '0';
                    }
                if (cnt < 10)
                    mine[i][j] = (char) (cnt + '0');
                else
                    mine[i][j] = 'M';
            }
        }
        for (int i = 0; i < n; i++)
            System.out.println(mine[i]);
    }
}

AI가 짠 코드입니당 ㅎㅎㅎ 역시..나보다.. 잘해욤...

import java.util.Scanner;

public class Main {
  static int n, m;
  static char[][] map;
  static int[][] mine = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
  
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    
    n = sc.nextInt();
    m = sc.nextInt();
    sc.nextLine();
    
    map = new char[n][m];
    
    for (int i = 0; i < n; i++) {
      map[i] = sc.nextLine().toCharArray();
    }
    
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (map[i][j] == '.') {
          int cnt = 0;
          
          for (int k = 0; k < 8; k++) {
            int x = i + mine[k][0];
            int y = j + mine[k][1];
            
            if (x >= 0 && x < n && y >= 0 && y < m && map[x][y] == '*') {
              cnt++;
            }
          }
          
          map[i][j] = (char) (cnt + '0');
        }
      }
    }
    
    for (int i = 0; i < n; i++) {
      System.out.println(map[i]);
    }
  }
}

 

 

 

 

 

 

https://chat.openai.com/chat

 

728x90
반응형
LIST

'일상 > TIL' 카테고리의 다른 글

27일차  (0) 2023.02.04
26일차  (0) 2023.02.03
24일차  (2) 2023.02.01
23일차  (0) 2023.01.31
22일차  (0) 2023.01.30
728x90
반응형
SMALL

23.02.01

  • 24일 해야할 일
    • [x] 코드테스트 문제풀기
    • [x] 깃허브에 올리기
    • [x] 터미널을 이용해서 깃허브에 올리기
    • [x] 코드리뷰 스터디
    • [ ] 모의고사 준비 (그리디!!!!)

hashset: value를 자바에서 자동으로 임의 지정하며 key에 중복을 배제하고 값을 넣음.

hashmap: key와 value를 개발자가 직접 기입하고 키의 중복을 배제함. 이때 hash는 키를 이용해서 값을 찾기 때문에 검색 알고리즘에 매우 효율적.

arraylist: 사용자가 정의한 <제너릭>객체에 맞는 값을 넣어 저장하고 중복 삽입이 가능 단, 수정 변경시 배열을 새로 생성해서 배열채로 집어넣기에 수정이 상대적으로 느림. 또한 키로 값을 찾을 수 없기에 검색 알고리즘에 매우 느린 속도를 자랑함 단, foreach문에선 arraylist가 더 빠름

String[] num = s.split(" "); // 문자열을 공백을 기준으로 분리!

parseInt() 메서드 : 특정 문자열의 기본 데이터 유형을 가져오는 데 사용

parseInt(null) 넣으면 에러!!

정렬 알고리즘 탐색 알고리즘 기술면접에 나옴

그리드

[Algorithm] 탐욕 알고리즘 (Greedy algorithm)

 

[Algorithm] 탐욕 알고리즘 (Greedy algorithm)

매일매일 알고리즘 공부하기

yganalyst.github.io

500원 100원 50원 10원이 있을 때,

720원을 만들기 위해서 그리드의 탐욕적 선택 속성을 지키면

500원 1개

100원 2개

10원 2개

이럴 경우 그리디를 쓰는 것이 맞지만

50원 40원 30원 10원

70원을 만들기 위해서 그리드의 탐욕적 선택 속성을 지키면

50원 1개

10원 2개

를 사용하지만, 30원 40원을 선택하는게 더 효율이 좋기 때문에 여기서는 그리드가 맞지 않는다.

문제에서 항상 그리드를 사용하는 게 항상 맞는 것이 아니다!

 

 

오늘은 걷기반에 있는 문제를 풀었습니다!

어제 모의고사 문제를 푸는데, 멘탈이 나갔습니다.흑흑

오늘은 회사에 들렸다가… 12시에 집에 도착했습니다 ㅠㅠ

오늘도 하루종일 문제를 풀다 지쳤습니당…ㅎㅎㅎ

문제는 많이 풀었는데, 내일 잘 볼수 있을지 모르겠습니다 ㅠㅠ

오늘도 고생하셨습니다!

728x90
반응형
LIST

'일상 > TIL' 카테고리의 다른 글

26일차  (0) 2023.02.03
25일차  (0) 2023.02.02
23일차  (0) 2023.01.31
22일차  (0) 2023.01.30
21일차  (0) 2023.01.30
728x90
반응형
SMALL

23.01.31

  • 23일 해야할 일
    • [x] 언어공부
    • [x] 코드테스트 문제풀기
    • [x] 깃허브에 올리기
    • [x] 터미널을 이용해서 깃허브에 올리기
    • [x] 코드리뷰 스터디

9시 전까지 자바 if문까지 복습 완료!

하차해야하나..

모의고사를 풀었는데

진짜… 1문제 다 완성은 못하고 제출했습니다.

우울합니다…

이대로 가다간 환불 당할거 같다…우울우울

결국 문제는 캘린더로 다 풀긴했는데 ㅠㅠㅠ왜 이런 실수를 해서 시간을 다써버렸을까요..
다음부터 

형변환 : 값의 정확도가 떨어질 수도 있다.
이에 대해 고민을 해보자!!

이번주에 공부해보자!!

java list removeall vs clear : 언제 쓰는지 정확하게 알아봅시다. (tistory.com)

 

java list removeall vs clear : 언제 쓰는지 정확하게 알아봅시다.

안녕하세요. 이 글에서는 List의 removeAll 메소드에 대한 질문이 와서 이에 대해 써 보도록 하겠습니다. 콜렉션에 대해서 입문하셨다면, clear와 혼동하기 매우 쉽습니다. 이 둘은 쓰이는 용도가 다

codingdog.tistory.com

 

728x90
반응형
LIST

'일상 > TIL' 카테고리의 다른 글

25일차  (0) 2023.02.02
24일차  (2) 2023.02.01
22일차  (0) 2023.01.30
21일차  (0) 2023.01.30
20일차  (0) 2023.01.28

+ Recent posts