반응형

https://school.programmers.co.kr/learn/courses/30/lessons/181943

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1. 문제 설명

 문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

 

 

2. 접근 방법

1) 주어진 인덱스(s)까지의 문자열 + overwriting_string 으로 구현하면 된다.

2) 이때, overwriting_string 문자열을 붙인 후에도 my_string 문자열을 추가해야 하는 경우를 생각한다.

3) 그래서, sub_st_02 (아래 코드 참고)를 사용하여 뒤에 붙여준다.

 

class Solution {
    public String solution(String my_string, String overwrite_string, int s) {
        String answer = "";
        
        int my = my_string.length();	
        int over = overwrite_string.length();
        
        String sub_st_01 = my_string.substring(0, s);
        String sub_st_02 = my_string.substring((s+over), my);
        
        return answer = answer + sub_st_01 + overwrite_string + sub_st_02;
    }
}

 

3. 회고

- 처음에는 substring 메소드 없이 구현하려고 했다. 왜냐하면, Java를 잘 몰라서 substring가 있는지 조차 몰랐기 때문이다. 그래서 my_string의 길이 - index 값이 overwring된 문자열의 길이보다 큰지, 작은지, 같은지 케이스를 모두 구분하려고 했다.

 

 그런데 알고보니 제한사항에 그것에 대한 답이 있었던 것... 문제를 잘 읽고, 이해하는 연습부터 해야겠다. 

 

반응형
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/161990

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[문제 설명]

 

코딩테스트를 준비하는 머쓱이는 프로그래머스에서 문제를 풀고 나중에 다시 코드를 보면서 공부하려고 작성한 코드를 컴퓨터 바탕화면에 아무 위치에나 저장해 둡니다.....이하 생략

 


우선 알고리즘 문제를 풀면서, 내가 가장 중요하게 생각하는 건 '복잡하게 생각하지 말자'이다. 물론 복잡한 알고리즘 문제도 있지만, 되려 복잡하게 생각하여 단순한 문제를 어렵게 접근하는 경우가 많았기 때문이다.

 

1. 주어진 wallpaper 배열의 length는 행(row)를, wallpaper 배열의 원소의 길이는 열(col)을 나타낸다.

 

 문제 특성상, String[] wallpaper의 원소 길이는 모두 같기 때문에 wallpaper[0]을 임의로 잡았다. 그리고 #이 존재하는 위치의 행과 열의 최소값과 최대값의 유무가 문제를 푸는데 키워드라는 것을 인지한다.

 

2. #이 들어가는 (최소 행, 최소 열), (최대 행 + 1, 최대 열 + 1)을 구한다.  

class Solution {
    public int[] solution(String[] wallpaper) {
        int minCol, maxCol;
        int minRow, maxRow;

        int row = wallpaper.length;
        int col = wallpaper[0].length();    //배열의 원소 길이는 같기에 wallpaper[0] 임의로 지정

        minCol = minRow = Integer.MAX_VALUE;
        maxCol = maxRow = Integer.MIN_VALUE;

        for(int i = 0; i < row; i++){
            for(int j = 0; j < col; j++){
                if(wallpaper[i].charAt(j) == '#'){
                    minRow = Math.min(minRow, i);
                    maxRow = Math.max(maxRow, i);
                    minCol = Math.min(minCol, j);
                    maxCol = Math.max(maxCol, j);
                }
            }
        }

        return new int[]{minRow, minCol, maxRow + 1, maxCol + 1};
    }
}

 

반응형
반응형

프로그래머스에서 문제를 풀다가 오름차순으로 정렬할 알고리즘이 있었다.

2중 for문에 익숙한 나는, 2중 for문으로만 하려고 했는데 알고리즘을 공부하기 위해선 다양한 방법을 시도해야 했다.

그래서 Arrays.sort() 메쏘드를 사용했다.

 

 


1. 2중 for문을 사용한 오름차순 정렬
import java.util.*;

public class HelloJava {
    public static void main(String args[]) {
        
        int[] a = new int[]{1,5,4,3,2};
        int k;

        for(int i = 0; i < a.length - 1; i++){
            for(int j = i + 1; j < a.length; j++){
                if(a[i] > a[j]){
                    k = a[i];
                    a[i] = a[j];
                    a[j] = k;       
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

 

 

2. Arrays.sort()를 사용하여 오름차순 정렬
import java.util.*;

public class HelloJava {
    public static void main(String args[]) {
        
        int[] a = new int[]{1,5,4,3,2};
        
       	Arrays.sort(a);
        
        System.out.println(Arrays.toString(a));
    }
}

여기서 만약에

System.out.println(a);

로 값을 출력한다면 [I@24d46ca6 와 같은 배열 a의 주소값이 나올 것이다.

배열은 참조변수이므로, 배열의 원소값을 나타내기 위해서는 toString 메소드를 사용한다면 파라미터를 통해 원소 값을 문자열로 변환 후, 원소를 출력할 수 있다.

반응형
반응형

 

적용 알고리즘 : 1~6 사이의 수 중에서 나올 수를 예측하고, 실제로 나온 수와 비교하는 것이다.

 

간단하게 해결!!

 

 

//주사위 값 예측하기

import java.util.*;

class DiceGame {    // DiceGame 클래스를 생성
    
    int diceFace;
    int userGuess;

    private void RollDice() {
        diceFace = (int)(Math.random() * 6) + 1;
    }

    private int getUserInput(String prompt) {
        System.out.println(prompt);
        Scanner s = new Scanner(System.in);
        return s.nextInt();
    }

    private void checkUserGuess() {
        if (diceFace == userGuess){
            
            System.out.println("주사위 값은 " + diceFace + "이고,");
            System.out.println("내가 예측한 값은 " + userGuess + "이다.");
            System.out.println("예측 값이 맞았다!!");
        }
        else{
            System.out.println("주사위 값은 " + diceFace + "이고,");
            System.out.println("내가 예측한 값은 " + userGuess + "이다.");
            System.out.println("예측 값이 틀렸다!!");
        }
    }

    public void startPlaying() {
        userGuess = getUserInput("예상값을 입력하시오.");       //getUserInput
        RollDice();     //RollDice 메써드 실행
        checkUserGuess();       //checkUserGuess 메써드 실행
    }
}

public class DiceGameTest {
    public static void main(String[] args) {
        DiceGame game = new DiceGame();     //DiceGame 객체 생성
        game.startPlaying();
    }
}
반응형
반응형

# for문

for문은 C, Java, javascript 등등 절차지향, 객체지향, 스크립트 언어 모든 곳에서 자주 쓰인다. 오늘은 html, css, javascript를 이용해서 간단하게 구구단을 화면에 출력해보자.

 

<HTML, javascript>

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>구구단 - for문</title>
	<link rel="stylesheet" href="css/gugudan-table.css">  <!-- 아래 css파일이 위치한 경로를 지정-->
<body>
	<h1>구구단</h1>
	<script>
		var i, j;

		for (i = 1; i <= 9; i++) {
			document.write("<table>");
			document.write("<tr><th>" + i + "단</th></tr>");
			for (j = 1; j <= 9; j++) {
				document.write("<tr><td>" + i +" X " + j + " = " + i*j + "</td></tr>");
			}
			document.write("</table>");
		}
	</script>
</body>
</html>

구구단 알고리즘은 이중for문을 사용하여 간단하게 구현할 수 있다. 그리고 나머지는, 입맛에 맞게 꾸미면 된다!

 

<CSS>

div{
    display: inline-block;
    padding: 0 20px 30px 20px;
    margin: 15px;
    border: 1px solid #ccc;
    line-height: 2;
}

div h3 {
    text-align: center;
    font-weight: bold;
}

 

위 코드는, Do it html/css, javascript의 책을 인용했습니다!

반응형
반응형

Javascript뿐만 아니라, if와 switch 제어문은 다른 언어를 공부할 때도 항상 배우는 요소이다. 각 제어문은 기능은 비슷하나, 장단점을 지니고 있다. switch는 case를 나눠서 하기 때문에 '정확하고, case가 적은 경우'에 효율적이다. if문은 '좀 더 큰 범위의 case(?)'에 장점을 지닌다. 

 

운영체제 측면에서 if와 switch를 비교하면, switch문을 사용했을 때 cpu가 명령을 수행하기 위해 메모리에 접근하는 횟수가 현저히 적다. 왜냐하면, if문을 사용했을 때는 if문을 만날 때마다 cpu가 메모리에 접근하지만, switch는 한번만 접근하면 여러 case에 값을 비교할 수 있기 때문이다.


#switch문

 

switch문은 하나 이상의 case와 break, default로 이루어져있다. 코드 예시를 보면 쉽게 이해가 될 것이다.

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Javascript 배우기</title>
    </head>
    <body>
        <h1>Javascript</h1>
        <script>
            var session = prompt("숫자를 선택하세요");

            switch(session) {
                case "1" : 
                document.write("숫자 1을 입력했습니다.");
                alert("1");
                break;

                case "2" : 
                document.write("숫자 2를 입력했습니다.")
                alert("2");
                break;

                case 3 : 
                document.write("숫자 3을 입력했습니다.")
                alert(3);
                break;

                default : alert("숫자를 잘못 입력하셨습니다.");
            }

        </script>
    </body>
</html>

중요한 것은 switch문의 case에는 항상 break가 있어야 한다는 것..!


# if문

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title>Document</title>
</head>
<body>
    <h1>Javascript 연습하기</h1>
    <script>
        var memNum = prompt("입장하는 관객의 수를 입력하세요.");
        var colNum = prompt("한 줄에 몇 명씩 앉을지 입력하세요.");
        var rowNum;

        if(memNum % colNum === 0){
            rowNum = memNum / colNum;
            document.write("총 " + colNum + "명씩 "+ rowNum + "줄로 앉으면 됩니다.");
        }

        else{
            rowNum = (memNum % colNum) + 1;
            document.write("총 " + colNum + "명씩 "+ rowNum + "줄로 앉으면 됩니다.");
        }
    </script>
</body>
</html>

 


# prompt와 parseInt, parsedouble 등등..

 

프롬프트(prompt)란 사용자에게 창을 띄워서 데이터를 받아올 수 있는 함수이다. 

위 switch문 예제를 실행하면 이렇게 나올텐데, 이것이 바로 prompt이다. alert과 비슷하게 생겼지만, alert은 사용자에게 말 그대로 값을 보여주는 주의와 같은 개념이기에 데이터를 받아오지는 못한다.

prompt는 데이터를 받으면 자동으로 문자열로 변환한다.

 

그렇기 때문에, parseInt()로 감싸주면, 프롬프트창으로 받은 데이터가 정수형으로 저장된다.

마찬가지로, parsedouble(), parsefloat()으로 감싸주면 실수형으로 데이터가 저장된다.

 

위의 switch예제에서 숫자 3을 입력한다면, 어떤 뜻인지 이해가 빠를 것이다.

반응형

'프로그래밍 > HTML_CSS_Javascript' 카테고리의 다른 글

[HTML/CSS?Javascript] 구구단 출력하기  (0) 2023.04.04
반응형

 

한동안 깃허브와 vscode를 안 쓰다가, 오랜만에 커밋/푸쉬하려니 아래와 같은 오류가 떴다. 

 

Make sure you configure your 'user.name' and 'user.email' in git.

​기존에 연동돼있던 깃허브와 vscode에서 뭔가 문제가 생긴 듯 하다. 오류 문구를 보고 직감적으로 든 생각은, 내가 깃허브의 닉네임을 바꿨던 것 때문에 발생한 것이라고 추궁했다. 근데 예전에 쓰던 닉넴이 기억이 안난다!

이럴 때는 어떻게 해결 하느냐? 아주 간단하다~

 

 

1. vscode에서 terminal로 접속.

 

 

2. 자신의 Github name과 이메일을 config하는 명력어 입력

git config --global user.name "깃허브 닉네임"

git config --global user.email "깃허브 이메일"

ex)

git config --global user.name "hello"

git config --global user.name "abcde@naver.com"

 

큰 따옴표 안에 값을 입력해야 한다는 것 참고!!

반응형
반응형

 

Doing the right thing, even when no one is wathcing
아무도 보고 있지 않아도, 옳은 일을 하는 것

 

현재 보안회사에서 일을 하는 나에게 아주 적절한 말인 듯 하다.

 

사실 정보보안 직무를 맡기 전에도, 나는 비슷한 가치관을 가지고 있었다.  누군가 알아주지 않아도 내 스스로가 알아주니까 열심히 해보자! 라는 생각이 강했었다.

 

그런데 어느 순간 부터... 내 신념이 흔들리기 시작했었는데, 그건 대학교 3~4학년 때 였던 것 같다. SNS를 급격하게 하기 시작하며, 흔히 말하는 '보여주기식 삶'을 살았다. 2년간 그랬던 행동들은 이제 접어두고, 다시 내 일에 집중할 때가 온 듯 하다!

 

성공하즈아~

 

 

반응형
반응형

전자공학을 전공하고 정보보안팀에서 인턴을 하고 있는 나는, 머릿속이 혼란스러울 때가 많다. 네트워크에 대해서도 어느 정도 배웠지만, 실무에서 쓰는 내용은 이론과 차이가 있었다. 학교에서 공부할 때는 정말 자세한 부분만 배웠던 파트도 있고, 수박 겉핥기로 배웠던 부분도 있는데, 실무에 오니 모든 것들을 종합한 지식이 내 머릿속에 있어야 한다...!

 

그중에서도 가끔씩 헷갈리는 용어들이 있다. 

 

SoC란?

전자공학이나 반도체 공부를 조금 했던 사람은, 당연히 System on Chip 아니야?라고 생각했을 것이다. 여러 기능을 가진 수많은 소자(메모리 소자, CPU 등)들이 모여 하나의 칩을 완성하는 것.

 

그런데, 인턴을 하면서 SoC란 단어가 조금 어색하게 쓰이는 것을 발견했다. 왜 그것을 SoC라고 부를까? 싶었는데, 알고 보니... SoC의 뜻이 System on Chip이 아니었다.

 

반도체에서 SoC : System on Chip

보안에서 SoC : Security Operation Center

 

하하...머쓱하다!

 

아직 갈 길이 멀구나~~

반응형
반응형

크롬을 사용하다 보면 마우스로 탭을 클릭하는 경우가 많은데, 이때 좀 더 효율적으로 사용하기 위해서 우리는 단축키를 사용한다. 내가 크롬에서 쓰는 몇 가지 단축키만 쪼금 모아봤다..!!

 

 

  • 현재 탭 닫기 : Ctrl + w
  • 크롬 전체 탭 닫기 : Ctrl + Shift + w (이거 그대로 하면, 지금 보는 창이 닫아집니다.. 주의하세요!)
  • 다음 탭으로 이동 : Ctrl + tab
  • 이전 탭으로 이동 : Ctrl + shift + tab
  • 새 탭 만들기 : Ctrl + T
  • 검색 주소창으로 이동하기 : F6
  • 페이지 검색 : Ctrl + F
  • 작업관리자 열기 : Ctrl + Shift + ESC

 

 

 

반응형

+ Recent posts