오늘도 모의고사 풀어 보자구!!!!!!!!!!!!!1
스파르타 코딩 클럽에서 제공되는 코딩테스트 무료 강의가 있기에 시청해볼것이다.
슬랙으로 하루에 두문제씩 코드 문제를 푸는것이 있어 들고왔다.!!!
문제 설명 정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.
public class Solution {
public int solution(int num1, int num2) {
//: solution 메서드를 정의하고 이 메서드는 int형 값을 반환하며, num1과 num2라는 두 개의 매개변수를 받는다.
int quotient = num1 / num2;
//: num1을 num2로 나눈 몫을 계산하여 quotient 변수에 저장한다
return quotient;
//quotient 변수에 저장된 몫을 반환하면 이것이 이 메서드의 결과값이다
}
}
문제 설명 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
public class Solution {
public int solution(int[] array) {
int[] count = new int[1000];
//: 주어진 숫자 범위에 해당하는 빈도수 배열 count를 생성
//count 배열의 인덱스는 가능한 숫자 값을 나타내며, 해당 인덱스의 값은 해당 숫자의 빈도수를 나타냄
for (int num : array) {
count[num]++;
//: 주어진 배열 array를 순회하면서 각 숫자의 빈도수를 count 배열에 저장.
//각 숫자가 나타날 때마다 해당 숫자의 인덱스 위치의 값을 증가.
}
int maxFrequency = 0;
int mode = -1;
int modeCount = 0;
//: 최빈값을 저장할 변수 mode와 그 빈도수를 저장할 maxFrequency 변수를 초기화.
//또한, 최빈값과 동일한 빈도수를 가진 숫자의 개수를 저장하는 modeCount 변수를 초기화
for (int i = 0; i < count.length; i++) {
//count 배열을 순회하면서 최빈값을 찾는다. 최빈값은 가장 높은 빈도수를 가지는 숫자
if (count[i] > maxFrequency) {
maxFrequency = count[i];
mode = i;
modeCount = 1;
//현재 숫자의 빈도수가 최빈값보다 크면,
//최빈값과 빈도수를 업데이트하고 modeCount를 1로 초기화
} else if (count[i] == maxFrequency) {
modeCount++;
//현재 숫자의 빈도수가 최빈값과 같으면, modeCount를 증가.
//이는 동일한 빈도수를 가진 다른 숫자가 존재함을 의미.
}
}
if (modeCount > 1) { // 최빈값이 여러 개인 경우
return -1;
//만약 최빈값과 동일한 빈도수를 가진 다른 숫자가 존재한다면,
//최빈값이 여러 개인 경우이므로 -1을 반환.
}
return mode;
//최빈값을 반환. 최빈값이 하나만 존재하고, 다른 숫자들보다 자주 나오는 경우에 해당.
}
}
아직 부족하다 다른분들의 정답을 보니 한참 부족함을 느낀다!
강의를 무료로 볼수있기에 지금은 당장은 언어를 익히는게 먼저이지만 미리 들어 봤다!!!
어제에 이어 마져 학습을 해볼것이다 목표는 익숙해지기!!!!!!!!!1
라고 하고는 나의 멍청함을 깨우치고 이리로 넘어왔다.
스타일 적용의 우선 순위
<인라인 스타일> -> 내.외부 스타일 시트 -> 웹 브라우저 기본 시트
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<style type="text/css">
button {
background-color: blue;
color: white;
height: 50px;
width: 200px;
border: none;
border-color: red;
border-style: solid;
border-radius: 2px;
cursor: pointer;
border-width: 5px;
}
</style>
</head>
<body>
<button>
버튼
</button>
</body>
</html>
1.색 이름(black..)
2.RGB 값 (rgb(0,0,0);)
3.Hex 값 (#0096FF)
4.RGBA 값 (rgb(0,150,255,0.5); 가장 마지막 수는 투명도)
5.HSL(hue,saturation,lightness)
색 채도 명도
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<link rel="stylesheet" href="styles.css" >
//위 부분이 있어야지 css파일을 불러온다고 할수있다
</head>
<body>
<button class="a-button">
ButtonA
</button>
<button class="b-button">
ButtonB
</button>
<button class="c-button">
ButtonC
</button>
</body>
</html>
.a-button {
background-color: rgb(20, 40, 192);
color: white;
border: none;
border-radius: 30px;
cursor: pointer;
margin-right: 10px;
margin-left: 30px;
padding-top: 20px;
padding-bottom: 20px;
padding-left: 16px;
padding-right: 16px;
transition: all 3s ease-in;
}
//마우스를 버튼으로 가져갈때 스타일
.a-button:hover {
opacity: 0.7; //투명도
background-color: black;
}
//마우스로 클릭했을떄
.a-button:active {
opacity: 0.3;
}
.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;
}
.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);
}
이렇게 만들면!!!
위의 사진처럼 된다!!!
저번에 한번 강의를 들었을때는 뭔가 따라하면 된다 이런 느낌이였는데 다른분의 강의를 다시 들어보니 따라하면서 내가 이해하고 익숙해짐이 중요함을 느꼇다.
얄코님의 강의를 들을것이다 우선적으로 이것을 할것이지만 머리가 아파지면 HTML,CSS로 도망 갈것이다.
public class ex01 {
public static void main(String[] args) {
// 💡 { } 로 블록 생성
{
int x = 1;
System.out.println(x);
}
{
int intNum = 123;
String str = "블록 밖은 위험해";
}
// 💡 블록 안에서 선언된 것은 밖에서 사용 불가
// intNum = 234;
// System.out.println(str);
String x = "전국구 보스";
{
String y = "동네 양아치";
// 💡 블록 안쪽에서는 바깥의 것 사용 가능
System.out.println(x);
System.out.println(y);
}
System.out.println(x);
// System.out.println(y); // ⚠️ 불가
int z = 1;
for (int i = 0; i < 5; i++) {
System.out.println(z + i);
}
//System.out.println(i); // ⚠️ 불가
}
}
블록은 경찰 조사실 유리 같은 느낌이다!!!!!
밖에선 안이 안보이고 안써지지만 안에선 가능!!!!
Button
클래스 - JRE의 동명 클래스 등 확인out
폴더 확인할 것public
, private
, protected
, defult
의 중요성~!package Sec06.chap02.pkg04;
import Sec06.chap02.pkg01.Parent;
import Sec06.chap02.pkg03.*; // ⭐️ 와일드카드
public class Main {
public static void main(String[] args) {
Parent parent = new Parent();
// ⭐️ 패키지가 다른 동명의 클래스들을 불러올 경우
Sec06.chap02.pkg01.Child child1 = new Sec06.chap02.pkg01.Child();
Sec06.chap02.pkg02.Child child2 = new Sec06.chap02.pkg02.Child();
Cls1 cls1 = new Cls1();
Cls2 cls2 = new Cls2();
Cls3 cls3 = new Cls3();
}
}
다른 패키지들을 인포트 해줌 단축키 활용도 중요!('⌥' + '↩︎')
src
폴더에서 명령 입력해 볼 것javac sec06/chap02/pkg4/Main.java
.class
파일들 생성 결과 확인.class
파일들 지운 뒤, 같은 폴더에서 아래의 명령 입력해 볼 것javac -d sec06/chap02/compileds sec06/chap02/pkg4/Main.java
.class
파일들 생성할 수 있음 확인kr.yalco.calculator
java
, javax
가 맨 앞에 올 수 없음 (JRE 라이브러리와 중복)src
폴더 안에 만들고 클래스 넣어 확인해 볼 것java.lang
패키지System
, String
등을 임포트하지 않아도 되는 이유 // java.lang 패키지에 속한 기본 라이브러리 클래스들
System.out.println("이 클래스들은 왜 임포트를 안 해도 될까요?");
Object object = new Object();
String str = new String("java.lang 패키지 소속이라 그럼");
Integer integer;
Math math;
// 다른 패키지에 속한 기본 라이브러리 클래스들
ArrayList arrayList;
Calendar calendar;
Optional optional;
Iterator iterator;
InputStream inputStream;
Serializable serializable;
Stream stream;
Button button;
의 위 코드는
이 처럼 바꾸어 주어야만 사용이 가능해진다!!!!!!!!!11
나는 왜 멍청한가...계속 사용되는 자료형 연산자 제어문 메소드
가 아직 헷갈리고 어렵다
그렇다면 복습이다!!!!!!!!!!!
다시금 강의를 재수강할것이다
자료형 | 크기 | 표현 범위 |
---|---|---|
byte | 1바이트 (8비트) | -128 ~ 127 (-2^7 ~ -2^7-1) |
short | 2바이트 | -32,768 ~ 32,767 |
int | 4바이트 | -2,147,483,648 ~ 2,147,483,647 |
long | 8바이트 | -9,223,372,036,854,775,808 |
~ 9,223,372,036,854,775,807 |
// ⚠️ 자료형의 범주 외의 수를 담을 수 없음
byte overByte1 = 127;
byte overByte2 = 128;
byte overByte3 = -128;
byte overByte4 = -129
byte byteNum;
int smallIntNum = 123;
// 명시적(강제) 형변환
// - 개발자 : "내가 책임질테니까 그냥 넣으세요."
byteNum = (byte) smallIntNum;
int intNum = 12345;
// ⚠️ 강제로 범주 외의 값을 넣을 경우 값 손실
byteNum = (byte) intNum; // 💡 12345 % 128
+ | 더하기 |
---|---|
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
% | 나머지 |
int a = 1 + 2;
int b = a - 1;
int c = b * a;
int d = a + b * c / 3;
int e = (a + b) * c / 3;
int f = e % 4;
💡 A가 B를 반환 (return) : 코드상 A를 B로 ‘바꿔 쓸 수 있다’는 의미
1 + 2
가 3
을 반환 : 1 + 2
를 3
으로 대체해 넣었을 때와 결과가 같음
숫자 데이터(리터럴)과 변수 혼합 사용 가능
다중으로 사용 가능, 단 연산자별 우선순위 있음
부수효과 없음 확인
메모리를 크게 절약해야 하는 상황이 아닌 이상 int
널리 사용
💡 int를 널리 사용하는 기타 이유들
byte b1 = 1;
byte b2 = 2;
short s1 = 1;
short s2 = 2;
// ⚠️ 아래는 모두 불가
// byte b3 = b1 + b2;
// short s3 = b1 + b2;
// short s4 = b1 + s2;
// short s5 = s1 + s2;
a += b | a = a + b |
---|---|
a -= b | a = a - b |
a *= b | a = a * b |
a /= b | a = a / b |
a %= b | a = a % b |
연산자 | 반환값 | 부수효과 |
---|---|---|
+ | 값 그대로 | 없음 |
- | 양음 반전 | 없음 |
x ++ | 값 그대로 | 1 증가 |
++x | 1 증가한 값 | 1 증가 |
x-- | 값 그대로 | 1 감소 |
--x | 1 감소한 값 | 1 감소 |
💡 ++, —가 앞에 붙고 뒤에 붙고의 정확한 차이
a == b | a와 b는 같다 |
---|---|
a != b | a와 b는 다르다 |
a > b | a가 b 보다 크다 |
a >= b | a가 b보다 크거나 같다 |
a < b | a가 b보다 작다 |
a <= b | a가 b보다 작거나 같다 |
boolean
자료형의 값을 반환 (true
또는 false
)=
( 대입 연산자 )와 혼동하지 말 것자료형 | 크기 |
---|---|
float | 4바이트 |
double | 8바이트 |
double
: float
보다 단순히 범위가 넓은 것이 아니라, 보다 정밀하게 표현 가능 // float의 최대값과 최소값
float fMin = -Float.MAX_VALUE;
float fMax = Float.MAX_VALUE;
// double의 최대값과 최소값
double dMin = -Double.MAX_VALUE;
double dMax = Double.MAX_VALUE;
// 최소 절대값
float fAbsMin = Float.MIN_VALUE;
double dAbsMin = Double.MIN_VALUE;
// ⭐ double이 범위도 넓고, 정밀도도 높음 확인
boolean bool1 = Float.MAX_VALUE < Double.MAX_VALUE;
boolean bool2 = Float.MIN_VALUE > Double.MIN_VALUE;
// float은 뒤에 f 또는 F를 붙여 표현
float flt1 = 3.14f;
double dbl1 = 3.14;
// ⚠️ float에는 double을 담을 수 없음
float flt2 = dbl1;
// 반대는 가능
double dbl2 = flt1;
long lng1 = 123;
// 정수를 대입할 시 묵시적 변환
// 💡 float(4바이트)에도 long(8바이트)의 값 담을 수 있음
float flt3 = lng1;
double dbl3 = lng1;
long lng2 = Long.MAX_VALUE;
// ⭐ 큰 수(정확히 표현가능한 한도를 넘어서는)일 경우
// 가능한 최대 정확도로
float flt4 = lng2;
double dbl4 = lng2;
float flt01 = 4.124f;
float flt02 = 4.125f;
double dbl01 = 3.5;
// float끼리의 연산은 float 반환
float flt03 = flt01 + flt02;
// float과 double의 연산은 double 반환
float flt04 = flt01 + dbl01; // ⚠️ 불가
// 부동소수점 방식상 오차 자주 있음
double dbl02 = 0.2 + 0.3f;
double dbl03 = 0.2f * 0.7f;
double dbl04 = 0.4 - 0.3;
double dbl05 = 0.9f / 0.3;
double dbl06 = 0.9 % 0.6;
// 소수부가 2의 거듭제곱인 숫자간 연산은 오차 없음
double dbl07 = 0.25 * 0.5f;
double dbl08 = 0.5 + 0.25 + 0.125 + 0.0625;
double dbl09 = 0.0625f / 0.125;
int int1 = 5;
float flt1 = 2f;
double dbl1 = 3;
double dbl2 = 7;
// 💡 정수 자료형과 실수 자료형의 계산은 실수 반환
int flt2 = int1 / flt1; // ⚠️ 불가
double dbl3 = int1 / dbl1;
double dbl4 = dbl2 / int1;
// 💡 리터럴로 작성시 double임을 명시하려면 .0을 붙여줄 것
double dbl5 = 5 / 2;
double dbl6 = 5.0 / 2;
double dbl7 = (double) 5 / 2;
int int1 = 5;
float flt1 = 5f;
double dbl1 = 5.0;
double dbl2 = 7.89;
// 💡 정수/실수간, 다른 숫자 자료형간 사용 가능
boolean bool0 = 123 == 123F;
boolean bool1 = int1 == flt1;
boolean bool2 = flt1 == dbl1;
boolean bool3 = int1 == dbl2;
boolean bool4 = int1 > dbl2;
boolean bool5 = flt1 >= dbl2;
boolean bool6 = dbl1 < dbl2;
내가 멍청 했던 이유가 있었다... 젤 쉬운 부분을 쉽다고 그저 그냥 그렇게 넘겼던것이다...
젤 쉬운게 아닌 젤 기본되는 것인데 연산자부터 뭔가 새로 배우는 느낌이 들다니....멍청하고 안일했다...
다시금 생각되며 내일부턴 복습이다...!!!!
어디까지? 당연히 제어문과 메소드까지!!!!!
git add.
git commit -m
git push origin ""