오늘 회고(+ 잡담)
밑에 알고리즘 문제를 스파르타 교육이 끝내기 전에 한번더 풀었다
프로젝트를 하면서 더 열심히 해야겠다고 생각했다.
내일 빨간날인데 카페나 가야지
필수로 할것 :코딩테스트 문제 1씩 (일단은 1개씩만이라도) 매일하자

=================================================================================
공부한 내용
[자바 알고리즘 문제 출처: 프로그래머스]
문제:
예를 들어 특정 x값을 정한 뒤 "acb"를
ax2 + cx + b = x2 + 3x + 2
와 같은 방식으로 정수에 대응시킵니다. 이때 x의 값이 26 이상이면 모든 알파벳 소문자로 이루어진 문자열이 서로 다른 정수에 대응됩니다.
문제는 해시는 고정된 크기의 데이터로 대응시키는 함수라는 점입니다. 실제로 위와 같은 방식으로 대응시키면 컴퓨터에서 정수값에는 제한이 있기 때문에 금방 제한값을 벗어나게 됩니다.
따라서 보통 매우 큰 m값을 제한으로 두어 위의 계산식의 결괏값을 m으로 나눈 나머지에 대응되게 합니다. 이러면 서로 다른 문자열이 같은 값으로 대응되는 경우가 생기지만, m값이 클수록 이러한 확률이 줄어들게 됩니다.
위 식에서의 정수 x와 m, 그리고 해시의 입력값으로 사용할 문자열 myStr이 주어질 때, 해시의 출력값인 정수를 반환하는 solution 함수를 완성하세요.
내가 작성한 코드
import java.util.*;
class Solution {
public int solution(int x, int m, String myStr) {
int answer = 0;
char[] ch = myStr.toCharArray();
int w = ch.length-1;//차수
for(int i=0;i<ch.length;i++){
answer+=(Math.pow(x,w)*(ch[i]-96))%m;
answer%=m;
w--;
}
return answer;
}
}
실패.
잠시동안 고민해 보다가 답을 보았다 최대한 안볼려고 했는데 로직만 간단히 보고 한번더 풀어보았다
class Solution {
public int solution(int x, int m, String myStr) {
int answer = 0;
int pow =1; // 차수
for(int i=myStr.length()-1;i>=0;i--){
int num = myStr.charAt(i)-'a'+1;
answer+=(num*pow)%m;
pow=(x*pow)%m;
}
answer%=m;
return answer;
}
}
나는 제곱Math함수로 접근했는데 그럴 필요가 없었는것 같고 차수를 4,3,2,1 내려가는것보다 1,2,3,4올리는게 더 쉬울 것 같았다. 다음부터 적용할것 . 왜 %m 나누는가에 대해서 알아봤는데 int 로 표현할수 있는 숫자가 약 -20억~ +20억 정도로 알고 있는데 문제에 주어진 범위로 수행하면 숫자가 훨씬 넘기 때문에 m 을 나누어 주는데 이때 개념을 해시함수라고 하는것이다 저렇게 해도 문제가 발생한다 그래도 범위가 초과하기 때문이라고 한다. 그래서 파라미터의 int와 for문에 int를 제외한 나머지를 long형으로 바꿔주면 해결
[코딩이 처음이어도 쉽게 배우는 웹 개발 3주차, 4주차, 5주차]
JSON : 데이터를 쉽게 교환하고 저장하기 위한 텍스트 기반의 데이터 표준이다.
{key : value}
// 키와 값의 쌍으로 이루어진 구조이다
자바스크립트의 딕셔너리와 비슷한것 같다.
클라이언트에서 서버로 무언가를 요청할때 사용하는 http 메서드에는 GET과 POST방식이 있다.
GET : 데이터조회를 요청할때 사용한다.

POST : 데이터 생성, 변경, 삭제를 요청할 때 사용한다.
FETCH: 단순히 네트워크를 통해 데이터를 요청하고 응답을 처리하는데 사용되는 JavaScript API이다.
참고) URL은 인터넷에서 특정 리소스의 위치를 나타내는 주소 (프로토콜: //도메인/경로)
위 그림에서 https가 프로토콜이다 http와 https의 차이는 http보다 https가 보안이 좋다.
도메인은 고유한 식별자로 사용되는 웹사이트의 주소 (저번 강의에서 은행으로 생각하면 이해하기 쉽다고 하셨다. 은행창구)
<script>
fetch("http://spartacodingclub.shop/sparta_api/seoulair").then(res => res.json()).then(data => {
console.log(data)
})
</script>
이렇게 정보가 남겨져있는 URL을 넣어 저장되어있는 값의 접근하여 우리가 필요한 데이터를 가지고 온다.JSON형식
파이어베이스 프론트엔드가 백엔드의 복잡한 작업(서버 관련)없이 수행할수 있게 해줄수 있는 플랫폼
데이터베이스: 데이터를 저장하고 여러 사람들이 관리하는 데이터들의 모음 문법 예:SELECT,INSERT,DELETE,UPDATE등
배포: 소프트웨어 개발 과정에서 개발한 애플리케이션, 웹사이트, 서비스등을 실제 사용자들에게 제공하는 과정
스크래핑: 인터넷에서 필요한 정보를 가져오기위해 웹페이지의 구조와 내용을 읽어오는 것이다.
하지만 모든 사이트에서 막 가져오면 안된다. 다른 언어에서는 모르겠지만 스프링에서도 스크래핑을 하는데 막 쓰다가 서버가 종료될수도 있다 이를 확인하는 방법이 robots.txt 파일에서 확인을 한다.
robots.txt파일의 예시) Disallow: 모든 페이지의 색인을 금지한다.
'TIL' 카테고리의 다른 글
[TIL] 스파르타 백엔드 캠프 6일차 (0) | 2024.10.07 |
---|---|
[TIL] 스파르타 백엔드 캠프 5일차 (3) | 2024.10.04 |
[TIL] 스파르타 백엔드 캠프 4일차 (1) | 2024.10.03 |
[TIL] 스파르타 백엔드 캠프 2일차 (2) | 2024.10.01 |
[TIL] 스파르타 백엔드 캠프 1일차 (6) | 2024.09.30 |